1

使用 L3 可以正常工作:

$r = Site::with('services')->get()

这正是我所期望的。一组Site对象,所有服务关系都整齐地填充。

但是,如果相反,我只使用以下内容:

$r = Site::with('services')->first()

或者

$r = Site::with('services')->all()

站点对象的关系完全为空。

这对我来说就像一个错误,但我想做的事情有什么不对吗?目前要获得与first()代替使用相同的效果,get()我必须从返回的数组中提取第一个元素。

4

1 回答 1

2

首先,使用->first() 应该按预期工作。再试一次,我有,它有效。如果它不适合您,请检查您的版本。我的是 3.2.10。

->all()不应该那样工作,它只是一个简单的快捷方式。文档说要检索整个表,请使用静态方法 all。请注意,它是一个静态方法,您在对象上下文中使用它。但是无论如何,您可以忘记这一点并使用->get(),这有什么问题?

如果您查看源代码laravel/database/eloquent/model.php,您会看到:

public static function all()
{
    return with(new static)->query()->get();
}

如您所见,此函数只是创建一个 new Model,然后检索所有行。

于 2013-01-03T11:09:38.260 回答