使用findOrFail()的Laravel急切加载问题

时间:2016-05-14 10:46:28

标签: php laravel laravel-5.2

为什么我会得到多个结果呢?我只想要给定客户端ID的“联系人”。不适合所有客户。

public function edit($id)
{
    $client = Client::findOrFail($id)->with('contacts')->get();
}

谢谢,

2 个答案:

答案 0 :(得分:2)

基本上,findOrFail()会为您找到一个结果,而不是返回一个集合。这意味着它已经为你做了get()电话。因此,您无法在此之后添加其他get()。如果你这样做,你会发现奇怪的结果,因为你正在构建一个新的查询。

这也意味着你不需要急于加载任何东西。急切加载的原因是因为它允许您在单个查询中获取多个对象的数据。但是你在这里只有一个对象 - 所以它并不重要。

以后,当您需要联系人时,您可以轻松地执行$client = Client::findOrFail($id);然后$client->contacts。它不会让你的表现变得更糟。

如果您只想要联系人,而不是客户,您可以轻松地执行此操作:$client = Client::findOrFail($id)->contacts;

答案 1 :(得分:1)

尽管Joel Hinz的回答是正确的,但您仍然可以在此查询中快速加载。

只需:

$client = Client::with('contacts')->findOrFail($id);