Laravel嵌套关系返回null

时间:2018-03-18 21:24:29

标签: php laravel laravel-5 laravel-5.6

我有下一个数据库结构:

enter image description here

我的Eloquent模型中有下一个代码:

Sample.php

public function polfzms()
{
    return $this->belongsToMany('App\Polfzm');
}

Polfzm.php

public function samples()
{
    return $this->belongsToMany('App\Sample');
}

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

Gene.php

public function polfzms()
{
    return $this->hasMany('App\Polfzm');
}

我尝试使用where子句中的dot来获取带有标签,polfzms和gene的样本数据 - polfzms.gene

public function show($id)
{
    return Sample::with('labels', 'polfzms.gene')->findOrFail($id);
}

但我有一个"gene":null

{
   "id":18,
   "person_id":1,
   "prefix_id":3,
   "labels":[
      {
         "id":1,
         "name":"Name1",
         "meaning":"dfdf",
         "pivot":{
            "sample_id":18,
            "label_id":1
         }
      },
   ],
   "polfzms":[
      {
         "id":1,
         "name":"G20210",
         "id_gene":1,
         "pivot":{
            "sample_id":18,
            "polfzm_id":1
         },
         "gene":null
      }
   ]
}

我使用最新的laravel版本。我该如何解决?

1 个答案:

答案 0 :(得分:1)

您的null关系正在获得Gene,因为您没有明确定义外键,也没有遵循Eloquent命名约定。

Eloquent希望外键为gene_id,而您的架构具有外键id_gene

要解决此问题,请更改架构以将外键定义为gene_id,或按如下方式更新您的关系:

public function gene()
{
    return $this->belongsTo('App\Gene', 'id_gene');
}