在laravel eloquent中从子模型的子项中检索自定义字段

时间:2018-05-24 15:30:29

标签: laravel laravel-5 eloquent

我尝试使用laravel中的with()语句从模型中检索自定义字段。当我刚刚获得所有字段时,子对象就可以了,但是当我尝试仅检索此子对象的某些字段时,它返回给我以下错误: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous ,低于我&#39 ; ll将展示我如何进行这些查询。

当我执行以下查询时,它可以工作:

 $cfps = CallForPaper::select('id', 'speech_id')->with([
            'speech:id,title,description',
            'speech.speakers'
         ])->get();

但是当我执行下面的代码时,它会返回我上面提到的错误。

$cfps = CallForPaper::select('id', 'speech_id')->with([
            'speech:id,title,description',
            'speech.speakers:id,name,email'
         ])->get();

注意:而不是只修改此代码中的行:'speech.speakers:id,name,email'

在我的模型演讲中, speakers 关系如下:

public function speakers()
    {
        return $this->belongsToMany(Speaker::class, 'speech_speaker');
    }

1 个答案:

答案 0 :(得分:1)

您需要为您选择的ID定义table_name:

$cfps = CallForPaper::select('id', 'speech_id')->with([
    'speech:TABLE_NAME.id,title,description',
    'speech.speakers:TABLE_NAME.id,name,email'
])->get();

您也可以执行以下操作,即。重命名id:

$cfps = CallForPaper::select('id', 'speech_id')->with([
   'speech:TABLE_NAME.id as speechID,title,description',
   'speech.speakers:TABLE_NAME.id as speakerID,name,email'
])->get();