CakePHP не может сохранить данные (HABTM) - PullRequest
0 голосов
/ 01 февраля 2011

Я пытаюсь создать списки пожеланий.

Существуют модели пользователей и продуктов. У пользователя есть список пожеланий. В списке пожеланий много товаров.

Причина, по которой я делаю это, состоит в том, что у пользователя есть список желаний, а в списке пожеланий есть товары, поэтому я могу получить URL-адрес, например wish_lists / add /: product_id


Я создал таблицу с именем wish_lists с id, user_id и name.

Я также создал таблицу под названием products_wish_lists с wish_list_id и product_id.

Я сделал здесь контроллер списков желаний:

class WishListsController extends AppController 
{
    var $hasOne = 'User';
    var $hasMany = 'Product';

    function beforeFilter() 
    {        
        parent::beforeFilter();       
        $this->Auth->deny('add');    
    }

    function add($id)
    {
        $user =  $this->Session->read("Auth.User");

        $this->WishList->set(array(
            'User.id' => $user['id'],
            'Product.id'=>$id,
            'WishList.name'=>'default'
        ));

        if($this->WishList->save())
        {
            $this->Session->setFlash('This product has been added to your wishlist.', 'flash_good');
        }
        else
        {
            $this->Session->setFlash('Error: This product was not added to your wishlist.', 'flash_bad');   
        }

        $this->redirect(array("controller"=>"products","action"=>"view",$id));
    }
}

Когда я перехожу на localhost/wish_lists/add/1 Он каждый раз говорит мне, что сохранил. но данные не добавляются в базу данных.

Не уверен, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011

вы устанавливаете массив неправильно. это должно быть $ data ['User'] ['id'] = 123; $ data ['Product'] ['id'] = 321;

$ this-> Wishlist-> SaveAll ($ данных);

Нет смысла сохранять имя, которое можно найти в таблице продуктов.

Вы можете посмотреть код здесь для большего количества идей https://github.com/Infinitas-Plugins/shop

В следующей ссылке есть общий метод компонента, который сохраняет товары в корзину или список пожеланий (разные БД), поскольку это почти одно и то же.

https://github.com/Infinitas-Plugins/shop/blob/master/controllers/components/shop.php#L62

0 голосов
/ 01 февраля 2011

Я никогда не делаю так, я всегда строю массив $data для передачи в качестве параметра 1 функции сохранения.

Поэтому я не уверен, позволит ли этот синтаксис указатьмодель, как вы сделали, то есть 'Model.field'.В любом случае, $this->WishList->save() сохранит только часть списка желаний.

Лучше, на мой взгляд, было бы:

$saveData = array(
    'User'=>array('id'=>$user['id']),
    'Product'=>array('id'=>$id),
    'WishList'=>array('name'=>'default'));
$this->WishList->saveAll($saveData);

(или что-то подобное, я программировал ColdFusionза последние три месяца и мой PHP может быть немного одурманенным)

...