Rau*_*ala 9 php cakephp cakephp-3.0
我正在寻找以前的答案,但我发现的那些与旧的cakephp版本有关
我有两个表,'杂志'和'问题',其中有'问题'属于'杂志'的关系,这就是IssuesTable的样子:
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
Run Code Online (Sandbox Code Playgroud)
表杂志有两个字段,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'));
Run Code Online (Sandbox Code Playgroud)
然后我将以下代码添加到问题视图add.cpt中
<?php
echo $this->Form->input('name', [
'type' => 'select',
'multiple' => false,
'options' => $magazines,
'empty' => true]);
?>
Run Code Online (Sandbox Code Playgroud)
但我得到输入选择与issues.magazine_id作为值而不是magazines.name
感谢您的帮助和评论
drm*_*nja 18
您想要使用,find('list')因为这将返回主键和显示字段: -
$this->set(
'magazines',
$this->Issues->Magazines->find('list')
);
Run Code Online (Sandbox Code Playgroud)
然后在您的表单中,magazine_id如果您想要为关联设置外键,则需要输入名称: -
echo $this->Form->input(
'magazine_id',
[
'type' => 'select',
'multiple' => false,
'options' => $magazines,
'empty' => true
]
);
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅文档.
更新
如果您遇到问题,find('list')可能是因为您的模型displayField没有正确设置.Cake通常displayField在初始化时确定模型.如果这不起作用,或者您想要一个不同的字段,可以在模型的initialize()方法中手动设置.例如: -
class MagazinesTable extends Table
{
public function initialize(array $config)
{
$this->displayField('name');
}
}
Run Code Online (Sandbox Code Playgroud)
更改'name'到相应的字段.
或者,您可以选择Cake将用于返回值的字段find('list')(当您要覆盖默认值时,这尤其有用displayField).例如: -
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17092 次 |
| 最近记录: |