cakephp 3.0如何使用值而不是id

时间:2015-06-19 21:10:37

标签: php cakephp cakephp-3.0

我正在寻找之前的答案,但我发现的那些与旧的cakephp版本有关

我有两张桌子,杂志'和'问题'哪里有关系'问题' BelongsTo'杂志',这就是IssuesTable的样子:

public function initialize(array $config){

$this->belongsTo('Magazines', [
    'foreignKey' => 'id'
]);
}

表杂志有两个字段,magazines.id和magazines.name

表问题有两个字段,issues.id,issues.magazine_id其中issues.magazine_id是外键

使用magazine.name值填充问题视图中的选择输入并保存issues.magazine_id,我已按照此设置控制器

$this->set('magazines', $this->Issue->Magazine->find('list'));

然后我将以下代码添加到问题视图add.cpt

    <?php
    echo $this->Form->input('name', [
    'type' => 'select',
    'multiple' => false,
    'options' => $magazines, 
    'empty' => true]);
    ?>

但我得到输入选择,其中issues.magazine_id为值而不是magazines.name

感谢您的帮助和评论

3 个答案:

答案 0 :(得分:18)

您想使用find('list'),因为这将返回主键和显示字段: -

$this->set(
    'magazines', 
    $this->Issues->Magazines->find('list')
);

然后在您的表单中,如果您想为关联设置外键,则需要输入名称为magazine_id: -

echo $this->Form->input(
    'magazine_id', 
    [
        'type' => 'select',
        'multiple' => false,
        'options' => $magazines, 
        'empty' => true
    ]
);

有关详细信息,请参阅docs

<强>更新

如果您遇到find('list')问题,可能是因为您的模型displayField未正确设置。 Cake通常在初始化时确定模型的displayField。如果这不起作用,或者您想要一个不同的字段,可以在模型的initialize()方法中手动设置。 E.g : -

class MagazinesTable extends Table
{

    public function initialize(array $config)
    {
        $this->displayField('name');
    }
}

'name'更改为相应的字段。

或者,您可以选择Cake将用于find('list')返回的值的字段(当您要覆盖默认的displayField时,这尤其有用)。 E.g : -

$this->Issues->Magazines->find('list', [
    'keyField' => 'id',
    'valueField' => 'name'
]);

答案 1 :(得分:0)

在月份助手中显示所选选项

$this->Form->month('students.month', [
'label' => false, 
'value'=>date('m'),
'required'=>true
]); 

答案 2 :(得分:0)

这实际上帮助了我。

$this->Issues->Magazines->find('list', [
   'keyField' => 'id',
   'valueField' => 'name'
]);