2012-06-12 44 views
0

相關的名字「我可能被謀殺MVC的整體概念沿線地方,但我目前的狀況是這樣的:CakePHP的MVC和 - 查找潛在多餘的SQL查詢時,與IDS

我在participantsevents和它們之間的關係HABTM(具有相關聯的字段money_raised)。我有一個控制器,可以在預先存在的事件和參與者之間成功創建新的HABTM關係,這些關係正如我所願。

當創建一個新的關係,我想閃光燈設置爲包括剛剛添加的參與者的名字。實際除了使用IDS做,所以我用下面的代碼:

public function addParticipantToEvent($id = null) { 
    $this->set('eventId', $id); 

    if ($this->request->is('post')) { 
     if ($this->EventsParticipant->save($this->request->data)) { 
      $participant_id = $this->request->data['EventsParticipant']['participant_id']; 
      $money_raised = $this->request->data['EventsParticipant']['money_raised']; 
      $participant_array = $this->EventsParticipant->Participant->findById($participant_id); 
      $participant_name = $participant_array['Participant']['name']; 
      $this->Session->setFlash('New participant successfully added: ' . $participant_name . ' (' . $participant_id . ') ' . '— £' . $money_raised); 
     } else { 
      $this->Session->setFlash('Unable to create your event-participant link.'); 
     } 
    } 
} 

這工作,但會生成以下SQL查詢:

INSERT INTO `cakephptest`.`cakephptest_events_participants` (`event_id`, `participant_id`, `money_raised`) VALUES (78, 'crsid01', 1024)  1 1 0 

SELECT `Participant`.`id`, `Participant`.`name`, `Participant`.`college` FROM `cakephptest`.`cakephptest_participants` AS `Participant` WHERE `Participant`.`id` = 'crsid01' LIMIT 1  1 1 0 

SELECT `Event`.`id`, `Event`.`title`, `Event`.`date`, `EventsParticipant`.`id`, `EventsParticipant`.`event_id`, `EventsParticipant`.`participant_id`, `EventsParticipant`.`money_raised` FROM `cakephptest`.`cakephptest_events` AS `Event` JOIN `cakephptest`.`cakephptest_events_participants` AS `EventsParticipant` ON (`EventsParticipant`.`participant_id` = 'crsid01' AND `EventsParticipant`.`event_id` = `Event`.`id`) 

這最後一個似乎是多餘的(和相當昂貴)作爲第二應該給我的一切,我需要的,但刪除$this->EventsParticipant->Participant->findById($participant_id)取出第二和第三查詢(這有點對我來說很有意義,但不完全)。

我能做些什麼來補救這種冗餘(如果確實是我沒有錯,這是一個冗餘)?請告訴我,如果我已經完成了這些事情應該如何工作 - 我對此很新。

回答

1

這可能是由於在默認設置recursive拉動關係。您可以通過在模型上設置public $recursive = -1;解決這個問題(注意,這將影響所有找到電話)。或者,暫時禁用此發現:

$this->EventsParticipant->Participant->recursive = -1; 
$this->EventsParticipant->Participant->findById($participant_id); 

總是建議您AppModel設置public $recursive = -1;和使用Containable在你需要它的相關數據帶來。

+0

我敢肯定,我之前已經試過了,它的沒有影響,但我只是試圖再次,它不正是我想要的東西,所以我一定是錯了以前做過的東西。非常感謝。 – rbobbington