我正在尝试加载对话中的所有联系人,除非我尝试访问对话属性,否则它会正常工作。
$contatos = Contato::whereBelongsTo($conta)->with('Conversa')->get();
foreach ($contatos as $contato) {
$saida_contato = new \stdClass();
$saida_contato->nome_contato = $contato->nome;
$saida_contato->id = $contato->id;
$saida_contato->numero_contato = $contato->id_contato;
$saida_contato->conta_id = $contato->conta_id;
当我尝试访问“conversa”的属性时,它执行 90 个查询。
$saida_contato->conversa_aberta = $contato->conversa->first()->id;
我可以使用以下方式访问我想要的值: contato->conversa[0]->aberta,但是当我这样做时,它会生成很多查询。
如果我之前已经预先加载过它,为什么它要为每个联系人执行查询?
您可以对急切加载返回的集合使用
first()
方法,而不是重新访问关系。
$contatos = Contato::whereBelongsTo($conta)->with('Conversa')->get();
foreach ($contatos as $contato) {
$saida_contato = new \stdClass();
$saida_contato->nome_contato = $contato->nome;
$saida_contato->id = $contato->id;
$saida_contato->numero_contato = $contato->id_contato;
$saida_contato->conta_id = $contato->conta_id;
$saida_contato->conversa_aberta = $contato->Conversa->first()->id;
}
您不会通过在此集合上调用
first()
来触发其他查询。