HABTM 关联未保存 - cakephp
Posted
技术标签:
【中文标题】HABTM 关联未保存 - cakephp【英文标题】:HABTM association not saved - cakephp 【发布时间】:2013-12-05 14:02:27 【问题描述】:我一直在寻找所有类型的解决方案,但都不起作用。我在 bredbook.php 和 Genre.php 中有两个模型,Bredbook 和 Genre,与 HABTM 相关联。无法保存关联。
这是一个模型的代码:
public $hasAndBelongsToMany = array('Bredbook' => array('className' => 'Bredbook',
'joinTable' => 'bredbooks_genres',
'foreignKey' => 'genre_id',
'associationForeignKey' => 'bredbook_id'));
这是表格:
echo $this->Form->create('Bredbook', array('action' => 'firstConnection'));
echo $this->Form->input('Genre', array('options' => $genres, 'empty' => false));
echo $this->Form->end('Validate');
在 BredbooksController.php 中:
if ($this->request->data)
if($this->Bredbook->saveAssociated($this->request->data))
return $this->redirect('/bredbooks/index');
bredbook 的创建没问题,但是表 bredbooks_genres 中没有创建关联。我已经尝试了一切...欢迎任何帮助。
【问题讨论】:
在保存前添加一个 debug($this->request->data) 并让我们知道结果 对不起,我写了这一行,我已经将调试设置为2,但我不知道应该打印在哪里...... 没关系,我愚蠢地保留了重定向...这是数组:array('Bredbook' => array('Genre' => '3')) 基于book.cakephp.org/2.0/en/models/…,我认为你的数组应该是这样的:array('Bredbook' => array(), 'Genre' => array('id' => 3))
,但我并不肯定。
在这里发布调试后我也尝试过。我只尝试了流派 id、整个对象和不同级别(与“Bredbook”相同、“Bredbook”内部等)。我也在尝试几个功能(save、saveAssociated...),因为我不知道我需要使用哪一个...我已经卡了好几天了。
【参考方案1】:
您需要在数据数组中发送Bredbook.id
:
<?php
echo $this->Form->create('Bredbook');
//It can be any other attribute, but need some Breedbook data
echo $this->Form->input('Bredbook.id', array('value' => $id));
echo $this->Form->input(
'Genre',
array(
'options' =>$genres,
'empty' => false
)
);
echo $this->Form->end('Validate');
或者在保存之前确保您的$this->request->data
与此类似:
Array
(
[Bredbook] => Array
(
//It can be any other attribute, but need some Breedbook data
[id] => 1
)
[Genre] => Array
(
[Genre] => Array
(
[0] => 1
)
)
)
当您创建新的Bredbook
时,此解决方案也可以工作,只要您发送该模型的一些数据,它不需要是id
,您也可以发送名称或其他属性你的Bredbook
模特。如果您发送Bredbook.id
,它不会创建新记录,只会进行关联,但如果您不发送id
并发送其他属性(例如name
),它将创建一个新记录并将将其与您正在发送的Genre
数据相关联。
【讨论】:
array( 'Bredbook' => array( 'Genre' => '3' ), 'Genre' => array( 'Genre' => array( (int) 0 => '3' ) ) )
,它也不起作用。我尝试了一切,没有创建关联
您需要将 brebook 模型的一个属性放入 breebok 数组中才能使其工作。你能粘贴一下你的面包簿表是什么样子的吗?
哦,对不起,我愿意。只是我只粘贴了与流派相关的字段,但我输入了其他信息。我有那个:array( 'Bredbook' => array( 'Genre' => '3', 'name' => 'New name', etc... ), 'Genre' => array( 'Genre' => array( (int) 0 => '3' ) ) )
。我想知道问题是否可能出在其他地方。我有 3 个具有正确外键的表,我有两个模型......我应该有一个关联表的模型吗?我应该有一些特殊的领域吗?
您是否尝试过不使用'Genre'
键发送数据?像这样array( 'Bredbook' => array( 'name' => 'New name', etc... ), 'Genre' => array( 'Genre' => array( (int) 0 => '3' ) ) )
我认为应该这样做。你只需要两个模型,第三个就是连接表。
我会尽快尝试,但目前我什至无法访问 localhost/xampp... 我尝试在不删除 cakephp 项目的情况下测试其他框架,但现在它没有不再工作了。如果我最终成功了,我会告诉你的【参考方案2】:
我终于做到了:不知道是不是必要的东西,但我只是用蛋糕烘焙来生成一切:http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html
现在我需要做一些工作来重新排列所有视图,但我的节省正在发挥作用,使用我首先发布的完全相同的代码,而且我想我也节省了一些时间来处理我需要的所有生成行为!
【讨论】:
以上是关于HABTM 关联未保存 - cakephp的主要内容,如果未能解决你的问题,请参考以下文章
尝试在保存时保存 CakePHP HABTM 关系中的重复关联