Php 关系:如何在多对多咨询后获得“一对一”数据

Php 关系:如何在多对多咨询后获得“一对一”数据,php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,正如标题所说,我试图访问与一对一关系相关的行,我尝试了模型中的方法,但它只在结果不是集合时起作用,可能需要更复杂的咨询,你有什么想法如何使用雄辩的 Empresa模型 Transferncia_recibir模型哈桑关系的逆 这是我得到的,一个收藏 这是他们每个人的需要 Thx for the help guys雄辩的关系是延迟加载的,这意味着只有当您实际访问它们时,它们才会加载它们的关系数据。显示的输出是预期的,因为您没有访问该关系,但可以通过两种方式加载该关系: 需要时访问它: $empr

正如标题所说,我试图访问与一对一关系相关的行,我尝试了模型中的方法,但它只在结果不是集合时起作用,可能需要更复杂的咨询,你有什么想法如何使用雄辩的

Empresa模型

Transferncia_recibir模型哈桑关系的逆

这是我得到的,一个收藏

这是他们每个人的需要


Thx for the help guys

雄辩的关系是延迟加载的,这意味着只有当您实际访问它们时,它们才会加载它们的关系数据。显示的输出是预期的,因为您没有访问该关系,但可以通过两种方式加载该关系:

需要时访问它:

$empresa->transferencias_recibidas->first()->transferencia;
渴望加载所有Transferncia关系

Empresa::with('transferencias_recibidas.transferencia')->where([ .. ])->get();
第二种方法缓解了N+1查询问题。因为第一个方法执行N个查询来检索所有关系,而不是第二个方法的一个查询来检索所有关系


您可能需要检查。

非常感谢,这很有效!!,有没有不使用where获取数据的方法?我正在阅读渴望加载,我发现我可以使用懒惰渴望加载bcoz我已经有了我的父模型$empresa,但是如果我使用这个,我只会得到我的表empresas中的所有数据,这个empresa::all,我不需要它哈你有$empresa吗?如果您正在使用Empresa::find$id,那么您可以更改为Empresa::where'id',$id->with'transferncias_recibidas.transferncia'->firstYeah与find方法完全相同,不是吗?。在第一种情况下,我必须使用where here$empresa->和'transferencias_recibidas.transferencia'->where'id',$id->get;现在使用您的代码,是的,它在两种情况下都有效,但是我们必须创建一个新变量,而不是使用旧的变量。我不知道我是不是在向你解释哈哈哈
$a=$empresa->transferencias_recibidas->find(1)->transferencia
$empresa->transferencias_recibidas->first()->transferencia;
Empresa::with('transferencias_recibidas.transferencia')->where([ .. ])->get();