我有一些代码在我的本地机器上运行正常(WAMP,PHP 5.4.3)但在生产服务器上没有(CentOS,PHP 5.4.11),我看不清楚为什么,冒犯了代码行是:
$sharedList = SharedList::with('itemList')
->where('unique_url', '=', $uniqueURL)
->first();
如果我删除with()急切加载,那么这运行没有问题,如果我没有(我不需要在我的本地机器上)然后我得到这个:
Argument 2 passed to Illuminate\Database\Eloquent\Relations\BelongsTo::match()
must be an instance of Illuminate\Database\Eloquent\Collection, instance of
ItemList given, called in /home/mgc/public_html/test/vendor/laravel/framework
/src/Illuminate/Database/Eloquent/Builder.php on line 474 and defined
/home/site/public_html/test/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
line 154: public function match(array $models, Collection $results, $relation)
来自SharedList模型的相关关系信息是:
class SharedList extends Ardent {
public function itemList()
{
return $this->belongsTo('ItemList', 'list_id');
}
我不知道这是否是大写问题,在with()方法中我尝试了ItemList,itemlist和itemList。
这可能是一个热心问题,但我尝试将extend Ardent
替换为extend Eloquent
无效。
答案 0 :(得分:0)
您的with('itemList')
是正确的,因为它应该是设置关系的函数的名称。我有一种感觉,问题可能出在那之后的where子句。尝试懒惰的急切加载。
$sharedList = SharedList::where('unique_url',$uniqueURL)->get();
$sharedList->load('itemList');