我可以在mysql中使用此查询获得结果。
SELECT group_concat(im.instrument_name) AS instrument
FROM ot_note otn
LEFT JOIN ot_instrument_entry oie ON otn.id=oie.ot_note_id
LEFT JOIN instrument_master im ON oie.instrument_name=im.id
GROUP BY otn.id
现在我有一个模型OTNote
,InstrumentMaster
和OTInstrumentEntry
。
我曾尝试使用via table的关系,但看起来我错过了什么。
我试图创建这样的关系,但它抛出了错误;
public function getInstrumentMaster()
{
return $this
->hasMany(OtInstrumentEntry::className(), ['ot_note_id' => 'id'])
->viaTable('instrument_master', ['id'=>'instrument_name']);
}
如何创建关系以便我可以访问与ot_instrument_entry相关的column_master.instrument_name列?
答案 0 :(得分:2)
ot_instrument_entry
是链接表。在课程OTNote
中,您应该:
// class OTNote
public function getInstrumentMaster()
{
return $this
->hasMany(InstrumentMaster::className(), ['id' => 'instrument_name'])
->viaTable('ot_instrument_entry', ['ot_note_id' => 'id']);
}
在课程InstrumentMaster
中,您可能希望将其反复访问:
// class InstrumentMaster
public function getOTNotes()
{
return $this
->hasMany(OTNote::className(), ['id' => 'ot_note_id'])
->viaTable('ot_instrument_entry', ['instrument_name' => 'id']);
}
可以找到详细信息here。