首页 > 解决方案 > Laravel Eager Loading 不起作用,而延迟加载同样有效

问题描述

目前我正在加载这样的关系:

$matches = App\Match::all();
foreach($matches as $match){
    $match->thuisPouleTeam;
}

原因是我需要加载这些关系,因为它是用于 api 端点。

它工作正常,但是所有其他关系属性都是通过预先加载的->with()方法加载的,但是如果我尝试通过预先加载来加载这个,它会变成一个错误:

strtolower() expects parameter 1 to be string, array given

我猜这可能是因为我使用compoships 包来允许复合键,所以关系方法如下所示:

public function thuisPouleTeam(){
    return $this->hasOne('App\PouleTeam', ["teamGuid", "pouleGuid"], ["thuisGuid", "pouleGuid"]);
}

但我得到了另一个几乎相同的关系:

public function complementaireMatch()
{
    return $this->hasOne('App\Match', ["thuisGuid", "uitGuid", "pouleGuid"], ["uitGuid", "thuisGuid", "pouleGuid"]);
}

而这个可以很好地加载急切,所以我不知道真正发生了什么,因为一个有效,但另一个没有。

有人知道出了什么问题吗?提前致谢!

标签: laravel-5eloquenteager-loading

解决方案


您必须Compoships在两个模型(MatchPouleTeam)中使用特征/模型:自述文件


推荐阅读