如何使用cakephp hasMany一次链接多个记录?
我在谷歌上搜索了很多,但似乎没有什么东西和我要找的东西相似 我试图做的是使用多个HTML列表同时将一个记录“用户”与其他多个记录“卡片”链接起来 表格如下: 用户(id、名称、用户名) 卡片(身份证、用户证) 型号:如何使用cakephp hasMany一次链接多个记录?,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我在谷歌上搜索了很多,但似乎没有什么东西和我要找的东西相似 我试图做的是使用多个HTML列表同时将一个记录“用户”与其他多个记录“卡片”链接起来 表格如下: 用户(id、名称、用户名) 卡片(身份证、用户证) 型号: class User extends AppModel { public $name = 'User'; public $hasMany = array('Card');} class Card extends AppModel { public
class User extends AppModel {
public $name = 'User';
public $hasMany = array('Card');}
class Card extends AppModel {
public $name = 'Card';
public $belongsTo = array('User');}
用户编辑.ctp视图
echo $this->Form->input('id');
echo $this->Form->input('Card', array('multiple'=>true));
我的控制器会是什么样子?目前看起来是这样的,但除了“没有相关卡”的用户记录外,它什么也不保存
$this->数据包含:
Array
(
[User] => Array
(
[id] => 1
[name] => Superman
[status] => 1
[Card] => Array
(
[0] => Array
(
[id] => 11402130001
[user_id] => 1
)
[1] => Array
(
[id] => 11402130002
[user_id] => 1
)
[2] => Array
(
[id] => 11402130003
[user_id] => 1
)
[3] => Array
(
[id] => 11402130004
[user_id] => 1
)
)
)
)
您需要为您的卡添加一个用户id条目,以便您的数据如下所示:
Array
(
[User] => Array
(
[id] => 10
)
[Card] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 10
)
[1] => Array
(
[id] => 2
[user_id] => 10
)
)
)
我会在$this->data['Card]数组上进行foreach循环:
foreach ($this->data['Card'] as &$card) {
$card['user_id'] = $this->data['User']['id'];
}
然后,您可以执行saveAll。顺便说一句,$this->User->Card->saveAll($this->data)应该被删除。谢谢G.J,但它不起作用!我以前试过这个,但是没有保存用户id。你知道问题出在哪里吗?我使用的是1.3。4@mmahgoub如果将卡阵列放在用户阵列之外会怎么样?我不确定它是否会起作用。如果没有,也许你应该尝试改变你的方式,尝试保存卡片而不是用户。告诉我它是否有效。嗨,G.J,如果是这样的话,它确实有效:
if($this->User->saveAll($this->data['User']){$this->Session->setFlash(uu('userhavesaved',true));}
但是又出现了一个问题!CakePHP不识别未选中的项目,换句话说,当我选择卡片时,它可以将卡片链接到用户,但当我删除选择时,它不会取消链接!你知道如何在没有foreach循环和saveField之类的东西的情况下实现这一点吗?我想我只需要将user_id设置为0,但我如何才能实现我只获取卡阵列中的选定项?!这似乎是不可能的,因为$\u POST it self不保存未选中的项,因此必须通过for循环进行比较。
foreach ($this->data['Card'] as &$card) {
$card['user_id'] = $this->data['User']['id'];
}