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());