在加载雄辩数据时播种期间出现array_merge错误

时间:2015-05-19 21:54:59

标签: php eloquent laravel-5

概要

我遇到了一个非常令人困惑的问题。基本上我所拥有的是一些播种器,它们从JSON文档加载数据并使用插入到数据库中 - 这样可以正常工作。

我有一个循环浏览一些数据的最终播种机,在这个循环中我使用加载记录但是当我尝试访问数据时我收到以下错误:

  [ErrorException]                            
    array_merge(): Argument #1 is not an array

播种器片段

foreach ($data as $country => $states) {
    $countryId = Country::where('iso2_code', $country)->first()->pluck('id');

    dd($countryId); // ErrorException

    array_walk($states, function (&$value) use ($countryId) {
        $value = ['country_id' => $countryId, 'name' => $value];
    });

    State::insert($states);
}

关于这个错误的令人困惑的部分是如果我不使用Eloquent我的问题解决了,按照:

foreach ($data as $country => $states) {
    $countryId = DB::table((new Country)->getTable())
        ->select('id')
        ->where('iso2_code', $country)
        ->first();

    dd($countryId->id); // Works.

    array_walk($states, function (&$value) use ($countryId) {
        $value = ['country_id' => $countryId, 'name' => $value];
    });

    State::insert($states);
}

为什么DB按预期工作但Eloquent会触发一些array_merge错误?

1 个答案:

答案 0 :(得分:1)

解决方案

在我的情况下,我在我的模型上设置了protected $dates = false。通常根据文档,我应该使用public $timestamps = falseprotected $dates = array();