cakephp 3.0 如何用值而不是 id 填充 select 字段
cakephp 3.0 how to populate a select field with values instead of id
我一直在寻找以前的答案,但我找到的答案与旧的 cakephp 版本有关
我有两个 tables,'magazines' 和 'issues' 其中有关系 'issues' BelongsTo 'magazines',这就是 IssuesTable 的样子:
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
table 杂志有两个字段,magazines.id 和 magazines.name
table 问题有两个字段,issues.id,issues.magazine_id 其中 issues.magazine_id 是外键
为了在问题视图中使用 magazine.name 值填充 select 输入并保存 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]);
?>
但我得到的输入 select 的值是 issues.magazine_id 而不是 magazines.name
感谢您的帮助和评论
您想使用 find('list')
,因为这将 return 主键和显示字段:-
$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()
方法中手动设置它。 例如:-
class MagazinesTable extends Table
{
public function initialize(array $config)
{
$this->displayField('name');
}
}
正在将 'name'
更改为适当的字段。
或者,您可以选择 Cake 将哪个字段用于 return 由 find('list')
编辑的值(这在您想要覆盖默认值 displayField
时特别有用)。 例如:-
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
在月份助手中显示所选选项
$this->Form->month('students.month', [
'label' => false,
'value'=>date('m'),
'required'=>true
]);
这实际上帮助了我。
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
我一直在寻找以前的答案,但我找到的答案与旧的 cakephp 版本有关
我有两个 tables,'magazines' 和 'issues' 其中有关系 'issues' BelongsTo 'magazines',这就是 IssuesTable 的样子:
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
table 杂志有两个字段,magazines.id 和 magazines.name
table 问题有两个字段,issues.id,issues.magazine_id 其中 issues.magazine_id 是外键
为了在问题视图中使用 magazine.name 值填充 select 输入并保存 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]);
?>
但我得到的输入 select 的值是 issues.magazine_id 而不是 magazines.name
感谢您的帮助和评论
您想使用 find('list')
,因为这将 return 主键和显示字段:-
$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()
方法中手动设置它。 例如:-
class MagazinesTable extends Table
{
public function initialize(array $config)
{
$this->displayField('name');
}
}
正在将 'name'
更改为适当的字段。
或者,您可以选择 Cake 将哪个字段用于 return 由 find('list')
编辑的值(这在您想要覆盖默认值 displayField
时特别有用)。 例如:-
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
在月份助手中显示所选选项
$this->Form->month('students.month', [
'label' => false,
'value'=>date('m'),
'required'=>true
]);
这实际上帮助了我。
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);