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

时间:2018-03-18 01:56:29

标签: php laravel eloquent relationship

正如标题所说,我正在尝试访问与一对一关系相关的行,我尝试使用我的模型中的方法,但它仅在结果不是集合时才有效,它也许需要一个更复杂的咨询,你有任何想法如何与雄辩

Empresa模型

public function transferencias_recibidas()
    {
        return $this->belongsToMany('App\Transferencia_recibir', 'empresa_transferencia_recibir', 'empresa_id', 'transferencia_recibir_id');
    }

Transferencia_recibir模型(hasOne关系的倒数)

 public function transferencia()
    {
        return $this->belongsTo('App\Transferencia');
    }

这就是我得到的,一个集合 This is what i get a collection

这是每个人的需要

$a=$empresa->transferencias_recibidas->find(1)->transferencia

This is what a need for each one of them

帮助人员的Thx

1 个答案:

答案 0 :(得分:1)

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

  1. 在需要时访问它:

    $empresa->transferencias_recibidas->first()->transferencia;
    
  2. “急切加载”所有transferencia关系

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

    您可能需要查看eager loading section