假设我有一个用户和书籍之间的hasMany关系,如下所示:
如果我想要预加载所有用户及其书籍,代码会是这样的:
这意味着只进行了2个查询:
然而,即使结果已知,在返回反向时仍会执行额外的查询:
有没有一种方法可以自动设置反向关系,而不需要进行另一个查询?
class User extends Model {
public function books()
{
return $this->hasMany(Book::class);
}
}
class Book extends Model {
public function user()
{
return $this->belongsTo(User::class);
}
}
如果我想要预加载所有用户及其书籍,代码会是这样的:
$users = User::with('books')->get();
这意味着只进行了2个查询:
- 获取所有用户
- 获取这些用户拥有的所有书籍
$users[0]->books[0]
然而,即使结果已知,在返回反向时仍会执行额外的查询:
$users[0]->books[0]->user
有没有一种方法可以自动设置反向关系,而不需要进行另一个查询?
$users[0]->books[0]
这样的写法,我知道它可能有ArrayAccess
接口,所以你可以像操作数组一样使用它,但它是一个集合,请习惯使用first()
或last()
等方法...按照Laravel的方式来做吧...希望你不会真的使用那种语法,只是为了演示而已... - undefined