如何在Yii2中从DB中的两个表中制作下拉列表



我有两个表: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获得相同数据的其他可能性,假设从模型DepartTranslate的关联在模型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',] ); ?>

相关内容

  • 没有找到相关文章

最新更新