2013-05-28 2 views
1

Я использую торт PHP 2.x. Моя база данных настроена следующим образом.CakePHP saveAll не сохраняет ключ 2-го уровня зависит

рейтинг Один отзыв

Обзор Есть много фотографий

data => array(
    'Rating' => array(
     'rating' => '1', 
     'user_id' => '1', 
     'listing_id' => '55' 
     ), 
    'Review' => array(
     'title' => 'Good Service', 
     'date_visited' => array(
      'month' => '05', 
      'day' => '28', 
      'year' => '2013', 
      ), 
     'service_used' => 'Easy Checkout', 
     'description' => 'After a fairly quick check-in, the check out service was also breeze ', 
     'Photo' => array(
      (int) 1 => array(
       'title' => 'Test', 
       'photo' => array(
       'name' => '2.JPG', 
       ), 
      'listing_id' => '55', 
      'user_id' => '1' 
      ) 
      ) 
     ) 
    ) 

Review.php

public $hasMany = array(
    'Photo' => array(
     'className' => 'Photo', 
     'conditions' =>'', 
     'order'  => '' 
     ) 
); 

Photo.php

public $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'user_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Review' => array(
     'className' => 'Review', 
     'foreignKey' => 'review_uuid', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Listing' => array(
     'className' => 'Listing', 
     'foreignKey' => 'listing_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

И наконец RatingsController.php

$this->Rating->create(); 

if ($this->Rating->saveAll($this->request->data, array('deep' => true))) { 
    $this->Session->setFlash(__('The rating has been saved')); 
    $this->redirect(array('action' => 'index')); 
} 

Проблема заключается в том, что все данные сохраняются, кроме review_uuid (который также создается одновременно)) в модели Фотографии.

mysql> select id,user_id,listing_id,review_uuid,title,photo,photo_dir from photos where ID=26; 
    +----+---------+------------+-------------+-------+--------------------------------------+----------- + 
    | id | user_id | listing_id | review_uuid | title | photo        | photo_dir | 
    +----+---------+------------+-------------+-------+--------------------------------------+----------- + 
    | 26 |  1 |   55 | NULL  | Test | 1a107372ef53ba26d7748a50c25e6b27.jpg | 01/77/74 | 
    +----+---------+------------+-------------+-------+--------------------------------------+-----------+ 

ответ

2

Он не похож на ваш определение внешнего ключа в hasMany отношений в Review нашли в Photo, вы не завершая отношения.

Ваш hasMany массив в Review.php должен выглядеть следующим образом:

public $hasMany = array(
    'Photo' => array(
     'className' => 'Photo', 
     'foreignKey' => 'review_uuid', 
     'conditions' =>'', 
     'order'  => '' 
     ) 
); 

Примечание параметр foreignKey. Вы говорите Cake, что Review имеет много фотографий, и каждая запись фотографий имеет внешний ключ с именем review_uuid, используемый для определения его отношения к обзору. Вы определяли внешний ключ в своем массиве belongsTo в модели Photo, но не в вашем hasMany массиве в модели Review, поэтому отношение никогда не было завершено.

Вы должны также определить belongsTo соотношение между Review и Rating

Review.php В:

public $hasMany = array(
    'Photo' => array(
     'className' => 'Photo', 
     'foreignKey' => 'review_uuid', 
     'conditions' =>'', 
     'order'  => '' 
     ) 
); 

public $belongsTo = array(
    'Rating' => array(
     'className' => 'Rating', 
     'foreignKey' => 'rating_id', 
     'conditions' => '', 
     'order' => '' 
    ) 
); 
+0

Спасибо. foreignKey отсутствует. wrt принадлежит, он уже был настроен в моей модели. Я задал лишь частичные теги, чтобы избежать долгого вопроса. – ghitesh

+0

Без проблем, рад, что вы это поняли. – Dan

Смежные вопросы