我正在寻找之前的答案,但我发现的那些与旧的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
感谢您的帮助和评论
答案 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'
]);