CakePHP saveAll / saveAssociated问题

时间:2013-02-06 05:24:22

标签: php cakephp cakephp-2.0 cakephp-2.1

我对以下CakePHP结果感到困惑。我为两个Model和一个Controller包含了代码(删除了不必要的东西)。

问题:一切都能正确保存。唯一的问题是store_users表的user_id字段没有保存。

任何明显的事情都可以看出我做错了吗?我尝试了saveAssociated和saveAll。

模型/ Store.php

<?php
App::uses('AppModel', 'Model');
class Store extends AppModel {
    public $belongsTo = array(
        'User'
    );
    public $hasMany = array(
        'StoreUser'
    );
}

模型/ StoreUser.php

<?php
App::uses('AppModel', 'Model');
class StoreUser extends AppModel {
    public $belongsTo = array(
        'User',
        'Store'
    );
}

控制器/ StoresController.php

<?php
App::uses('AppController', 'Controller');
class StoresController extends AppController {
    public $uses = array('Store');

    public function create() {
        $this->Store->create();
        $storeData = array(
            'Store' => array(
                'title' => 'New Store',
                'user_id' => $this->Auth->user('id')
             ),
             'StoreUser' => array(
                 'user_id' => $this->Auth->user('id')
              )
        );
        if($this->Store->saveAll($storeData) !== false) {
            // Success
        } else {
            // Error
        }
    }
}

DB中的结果

stores table:
    id: 1
    title: New Store
    user_id: 1
    ...

store_users table:
    id: 1
    store_id: 1
    user_id: 0
    ...

1 个答案:

答案 0 :(得分:1)

发现它!因为 Store hasMany StoreUser 而不是 Store hasOne StoreUser 我必须将提供的数据中的user_id包装在一个数组中。

<强>控制器/ StoresController.php

<?php
App::uses('AppController', 'Controller');
class StoresController extends AppController {
    public $uses = array('Store');

    public function create() {
        $this->Store->create();
        $storeData = array(
            'Store' => array(
                'title' => 'New Store',
                'user_id' => $this->Auth->user('id')
             ),
             'StoreUser' => array(
                 array(
                     'user_id' => $this->Auth->user('id')
                 )
              )
        );
        if($this->Store->saveAll($storeData) !== false) {
            // Success
        } else {
            // Error
        }
    }
}