簡體   English   中英

Laravel懶得急切的裝載

[英]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());

在這里,您嘗試在集合而不是Modelload關系,因為$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM