Php 拉维尔惰性负载

Php 拉维尔惰性负载,php,laravel,Php,Laravel,我在这个话题上纠缠了一个小时,我没有发现我遗漏了什么。我正试着做一个懒洋洋的工作: $p = Project::all(); $p = $p->load('skills', 'user', 'comments', 'suggests'); var_dump($p->skills()); 但这就产生了一个错误: Call to undefined method Illuminate\Database\Eloquent\Collection::skills() 在这里,您试图在集合而

我在这个话题上纠缠了一个小时,我没有发现我遗漏了什么。我正试着做一个懒洋洋的工作:

$p = Project::all();
$p = $p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills());
但这就产生了一个错误:

Call to undefined method Illuminate\Database\Eloquent\Collection::skills()

在这里,您试图在集合而不是模型上加载
关系,因为
$p
包含
模型的集合
,所以此代码不起作用

$p = Project::all();
$p = $p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills()); <-- $p is a collection not a Model
或者使用索引指定集合中的项,如:

$skills = $p->get(2)->skills()->get(); // Get skills from second Project, 1st = 1
dd($skills->get(2)); // Get second skill item from collection of skills
也可以运行一个循环

$p = Project::all();
foreach($p as $project) {
    $skills = $project->skills()->get();
    dd($skills->first());
    dd($skills->get(2)) // 2nd item/skill, 1st = 1 (not 0)

    // Or another loop
    foreach($skills as $skill) {
       // Use $skill->field_name
    }
}
只是不要将$p->load()分配给$p


你的意思是说
var\u dump($p->skills)
maybe?@VictorBjelkholm然后
未定义属性:illumb\Database\elounce\Collection::$skills
您能在您定义了关系的项目模型中发布代码吗?您是否将其列为“skill”而不是“skills”?@ChrisG是的,它通过
::with()
工作,但在我使用的这种调用中失败。@revo仅从这些信息我不确定。我尝试了一个简单的设置,它按预期工作。您可以通过此处或github提供更多代码吗?
$p = Project::all();
foreach($p as $project) {
    $skills = $project->skills()->get();
    dd($skills->first());
    dd($skills->get(2)) // 2nd item/skill, 1st = 1 (not 0)

    // Or another loop
    foreach($skills as $skill) {
       // Use $skill->field_name
    }
}
$p = Project::all();
$p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills());