2011-03-19 134 views
2

我想在HABTM關係中構建我自己的數據數組saveAll。保存cakePHP沒有表格的HABTM數據

型號:

var $hasAndBelongsToMany = array(
    'TweetSearch' => array(
     'className' => 'TweetSearch', 
     'joinTable' => 'favorites_tweet_searches', 
     'foreignKey' => 'favorite_id', 
     'associationForeignKey' => 'tweet_search_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

var $hasAndBelongsToMany = array(
    'Favorite' => array(
     'className' => 'Favorite', 
     'joinTable' => 'favorites_tweet_searches', 
     'foreignKey' => 'tweet_search_id', 
     'associationForeignKey' => 'favorite_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

然後在favorites_controller:

function add($searchText='lala') 
{ 
    $tweetSearch = trim($searchText); 
    //Save tweet search 
    $tweet = $this->Favorite->TweetSearch->find('first',array(
     'conditions'=>array('TweetSearch.search' => $tweetSearch), 
     'recursive' => -1)); 

    if(empty($tweet)) 
    { 
      if(!$this->Favorite->TweetSearch->save(array('TweetSearch.search' => $tweetSearch))) 
      { 
       echo 'Search cannot be saved. Please try again.'; 
       return ; 
      } 
      //debug('ok'); 
      $tweetID = $this->Favorite->TweetSearch->id; 
      $toSave = array('TweetSearch' => array('id' => $tweetID)); 
    } 
    else 
    { 
     $tweetID = $tweet['TweetSearch']['id']; 
     $toSave = $tweet; 
    } 

    $links = array(); 
    $this->params['form']['favlinks'] = array('http://www.lala.gr','http://www.anarxeio.gr'); 
    $i=0; 
    foreach($this->params['form']['favlinks'] as $link) 
    { 
     $links['user_id'] = $this->_userDetails['id']; 
     $links['link'] = trim($link); 
     $links['id'] = $i++; 

     //$links['FavoritesTweetSearch']=array('tweet_search_id' => $tweetID); 

     $toSave['Favorite'][] = $links; 
    } 

    if(!$this->Favorite->saveAll($toSave)) 
    { 
      echo 'Search cannot be saved. Please try again.'; 
      //return ; 
     } 

    debug($toSave); 

    //exit(); 
} 

,你可以看到我在此處手動創建數據只是爲了測試它。我沒有任何表單。 但數據沒有保存,並且sql dump顯示:

9 START TRANSACTION  0  0 
10 SELECT `FavoritesTweetSearch`.`tweet_search_id` FROM `favorites_tweet_searches` AS `FavoritesTweetSearch` WHERE `FavoritesTweetSearch`.`favorite_id` = ''  1 1 0 
11 DELETE `FavoritesTweetSearch` FROM `favorites_tweet_searches` AS `FavoritesTweetSearch` WHERE `FavoritesTweetSearch`.`favorite_id` = '' AND `FavoritesTweetSearch`.`tweet_search_id` = (0)  1  0 
12 INSERT INTO `favorites_tweet_searches` (`favorite_id`,`tweet_search_id`) VALUES ('','1'), ('','0')  2  0 
13 COMMIT 
+0

發佈您的數據庫架構和數據。第一個SELECT語句正在搜索空白值! ('favorite_id' ='') – Ashok 2011-04-02 06:42:43

+0

你可以發佈debug($ toSave)的輸出嗎? – Headshota 2011-04-06 20:58:05

回答

0

刪除此行。

$links['id'] = $i++; 

Id字段是自動遞增的,所以不需要給它賦值。 然後更改此零件:

if(!$this->Favorite->saveAll($toSave['Favorite'])) 
{ 
    echo 'Search cannot be saved. Please try again.'; 
    //return ; 
}