我有两个表:depart和translate。在";"离开";我用title_id保存部门,它在第二个表"中;翻译";并用不同的语言保存dep的标题。现在我需要制作一个部门的下拉列表,但它在该列表中显示'title_id',但我需要从第二个表中取一个dep.name,并将其放入按部门表排序的列表中。我现在有这个:
<?= $form->field($model, 'departId')->dropDownList(ArrayHelper::map($depart, 'id', 'title_id'), ['prompt' => 'Choose department',] ); ?>
您必须首先运行一个查询来获取下拉列表的数据,类似于此,假设translate
中翻译文本的字段是text
:
$depart = (new yiidbQuery())
->select('d.id, t.text')
->from(['d' => 'depart', 't' => 'translate'])
->where('d.title_id = t.id')
->orderBy('t.text')
->all();
使用ActiveRecord获得相同数据的其他可能性,假设从模型Depart
到Translate
的关联在模型Depart
中定义。
$depart = Depart::find()
->join('translate')
->select('depart.id, translate.text')
->orderBy(translate.text)
->asArray()
->all();
在型号Depart
:中
/**
* @return yiidbActiveQuery
*/
public function getTranslate()
{
return $this->hasOne(Translate::class, ['id' => 'title_id']);
}
您可以使用text
而不是title_id
:的表单字段
<?= $form->field($model, 'departId')->dropDownList(ArrayHelper::map($depart, 'id', 'text'), ['prompt' => 'Choose department',] ); ?>