如何使用cakephp hasMany一次链接多个记录?

如何使用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

我在谷歌上搜索了很多,但似乎没有什么东西和我要找的东西相似

我试图做的是使用多个HTML列表同时将一个记录“用户”与其他多个记录“卡片”链接起来

表格如下: 用户(id、名称、用户名) 卡片(身份证、用户证)

型号:

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'];
}