【问题标题】:How to make dropdown list from two tables in DB in Yii2?如何从 Yii2 的 DB 中的两个表中制作下拉列表?
【发布时间】:2020-11-20 07:13:46
【问题描述】:

我有两张桌子:离开和翻译。在“depart”中,我使用 title_id 保留部门,它位于第二个表“translate”中,并以不同语言保留 dep 的标题。 现在我需要制作一个部门的下拉列表,但它在该列表中显示'title_id',但我需要从第二个表中获取一个 dep.name 并将其放入按部门表排序的列表中。我现在有这个:

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

【问题讨论】:

  • 你能显示为$depart变量选择数据的查询吗?

标签: mysql yii2 dropdown


【解决方案1】:

你必须先运行一个查询来获取下拉列表的数据,类似的,假设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 或title_id 一起使用:

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

【讨论】:

  • 我使用了第一个变体!谢谢它的工作,但我最后添加了-&gt;all(),它工作正常!
  • @andre1ka 是的,你当然是对的。我在答案中添加了all()
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多