雄辩ORM动态关系属性与动态加载方法


Eloquent ORM dynamic relation properties vs method for eager loading

我在Slim框架中使用Eloquent。现在我想利用急切加载。我想知道使用属性和方法之间是否有区别。

我问的原因是因为我使用的是twig模板引擎,我只能调用一个方法。

我是否只能使用该属性来利用急切加载?

$obj = new Book();
$books = $books->with('author')->get();
// Using the property
foreach ($books as $book) {
    echo $book->author->name;
}
// Using the method
foreach ($books as $book) {
    echo $book->author()->get()->name;
}

差别很大。在第二行中,您已经用它们的作者填充了$books。当您在第一次foreach中遍历它们时,您已经拥有了所有数据,因此无需执行任何额外的sql查询。

但是在第二个foreach中,你在每次迭代中调用get()方法,Laravel开始重新填充作者,为每本书一次又一次地进行查询。