【发布时间】:2020-09-24 20:01:38
【问题描述】:
为什么我会为此获得多个结果?我只想要给定客户 ID 的“联系人”。并非适用于所有客户。
public function edit($id)
{
$client = Client::findOrFail($id)->with('contacts')->get();
}
谢谢,
【问题讨论】:
标签: php laravel laravel-5.2
为什么我会为此获得多个结果?我只想要给定客户 ID 的“联系人”。并非适用于所有客户。
public function edit($id)
{
$client = Client::findOrFail($id)->with('contacts')->get();
}
谢谢,
【问题讨论】:
标签: php laravel laravel-5.2
基本上,findOrFail() 会为您找到一个结果,而不是返回一个集合。这意味着它已经为您拨打了get() 电话。所以你不能在那之后添加另一个get()。如果你这样做了,你会得到你注意到的奇怪的结果,因为你实际上是在构建一个新的查询。
这也意味着您不需要急切地加载任何内容。急切加载之所以好的原因是因为它允许您在单个查询中获取多个对象的数据。但无论如何,这里只有一个对象 - 所以这并不重要。
当您需要联系人时,您可以轻松地只使用$client = Client::findOrFail($id);,然后再使用$client->contacts。它不会让你的表现更差。
如果您只想要联系人而不是客户,您可以轻松地做到这一点:$client = Client::findOrFail($id)->contacts;
【讨论】:
{{ Form::model($client, … {!! Form::text('contact->name', null, array('class' => 'form-control')) !!}
@foreach ($client->contacts as $contact) 并从那里开始。
虽然 Joel Hinz 的响应是正确的,但您仍然可以在此查询中进行预加载。
只要做:
$client = Client::with('contacts')->findOrFail($id);
【讨论】: