如何从 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 获取相同数据的其他可能性,假设从模型 Depart
到 Translate
的关联是在模型 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',] ); ?>
我有两个 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 获取相同数据的其他可能性,假设从模型 Depart
到 Translate
的关联是在模型 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',] ); ?>