我尝试使用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');
}
答案 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();