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

How to make dropdown list from two tables in DB in Yii2?

我有两个 table:离开并翻译。在“离开”中,我将部门与 title_id 保持一致,它在第二个 table“翻译”中,并以不同的语言保留部门的头衔。 现在我需要制作一个部门的下拉列表,但它在该列表中显示“title_id”,但我需要从第二个 table 中取出一个 dep.name 并将其放入有序列表中按部门 table。我现在有这个:

<?= $form->field($model, 'departId')->dropDownList(ArrayHelper::map($depart, 'id', 'title_id'), ['prompt' => 'Choose department',] ); ?>

你必须先 运行 一个查询来获取下拉列表的数据,类似的东西,假设 translate 中翻译文本的字段是 text:

$depart = (new \yii\db\Query())
    ->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 \yii\db\ActiveQuery
  */
public function getTranslate()
{
    return $this->hasOne(Translate::class, ['id' => 'title_id']);
}

你可以使用你的表单字段 text insted of title_id:

<?= $form->field($model, 'departId')->dropDownList(ArrayHelper::map($depart, 'id', 'text'), ['prompt' => 'Choose department',] ); ?>