2017-05-07 57 views
1

现场我已经链接的表,当我创建这样如何从链接表访问下拉列表

<?= $form->field($model, 'player_id')->dropDownList(
      ArrayHelper::map(Player::find()->all(), 'id', 'category_id'), 
      ['prompt' => 'Select']) 
?> 

下拉列表中它的工作原理。 我需要在我的名单类别名称,而不是类ID(表category从我目前的表由idnamecategory_id链接到category.id) 我怎么能作出这样的?

+0

在模型中你有这种关系吗? – gmc

+0

是的,我可以在GridView中使用它(名称而不是id)。我不知道如何在下拉列表中显示。 – Vadim

回答

1

假设你的关系被称为getCategory,你只需要添加相应的joinWith和使用name属性:

$form->field($model, 'player_id')->dropDownList(
    ArrayHelper::map(Player::find()->joinWith('category')->all(), 'id', 'name'), 
    ['prompt' => 'Select']) 

更新您的要求:getNameAndLastname应该包括你的类别数据:

public function getNameAndLastname() { 
    $cat = $this->getCategory()->one(); 
    return $this->lastname.' '.$this->firstname.' - Cat: '.$cat->name; 
} 

现在:

$form->field($model, 'player_id')->dropDownList(
    ArrayHelper::map(Player::find()->joinWith('category')->all(), 'id', 'nameAndLastname'), 
    ['prompt' => 'Select']) 
+0

谢谢@gmc!有用。我还有一个问题:如何在下拉列表中连接2个或3个字段:我需要在名称,姓氏(都来自一个表)和category.name(来自链接表'category')之后。现在,我可以制作第一个和第二个,但不能同时在一起:) – Vadim

+0

在您的模型中创建一个返回这些字段串联的方法(例如'getFullName()'),并在映射时调用该方法:'ArrayHelper :: map (Player :: find() - > joinWith('category') - > all(),'id','fullName')' – gmc

+0

我已经有了这个方法:'public function getNameAndLastname() { return $ this- >姓氏“。 ”这 - $>姓名。 }'但如何将category.name添加到那里?哪种方法可以做到这一点? – Vadim