[英]Laravel lazy eager loading
我被困在这个话题上一个小时,我没有看到任何我想念的东西。 我正在尝试做一个懒惰的急切负载:
$p = Project::all();
$p = $p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills());
但是这会抛出一个错误:
Call to undefined method Illuminate\Database\Eloquent\Collection::skills()
只是不要将$ p-> load()分配给$ p。
$p = Project::all();
$p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills());
在这里,您尝试在集合而不是Model
上load
关系,因为$p
包含Models
的集合,因此此代码将不起作用
$p = Project::all();
$p = $p->load('skills', 'user', 'comments', 'suggests');
var_dump($p->skills()); <-- $p is a collection not a Model
您可以使用循环或使用集合中的索引来指定要为其加载关系的Model
,例如:
$p = Project::all();
$p = $p->load('skills', 'user', 'comments', 'suggests');
// Get the first Model from collection and load it's first
// skill from collection of skills objects
dd($p->first()->skills()->first());
或使用索引指定集合中的项目,如:
$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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.