2017-01-25 63 views
2

我想使用動態查找器方法。我見過the documentation$this->Users->findByUsername。我的問題是,我的列名是post_id,我不確定下劃線如何影響我的動態查找功能的名稱。這是到目前爲止,我已經試過的人似乎並不能得到工作CakePHP 3具有下劃線的動態查找器

findByPost_id($post_id) 
findByPost_Id($post_id) 
findByPost_ID($post_id) 
findByPostId($post_id) 

對於這裏的上下文是我的代碼是什麼樣子

//VotesTable.php 
public function afterSaveCommit($event, $entity, $options) { 
    if ($entity->vote_type_id == self::favorite) { 
     $qt = TableRegistry::get('questions'); 
     $question = $qt->findByPostId($entity->post_id); 
     $question->favorite_count = $question->favorite_count + 1; 
     if (! $qt->save($question)) { 
      throw new \Exception("Unable to update favorite count", 500); 
     } 
    } 
} 

當我登錄$question它輸出的查詢,不是對象,並且查詢不能運行。它WHERE 'questions'.'post_id' = :c0

+2

在這裏發佈您的完整代碼。當我使用動態加載器時,我使用'findByPostId'並且它可以工作。它一定在別的地方。 – spencdev

回答

2

蛋糕將轉換爲下劃線Pascal大小寫的話,那麼你會發現它是這樣的:

$this->findByPostId(); 

這是正確的方法。

+0

我試過使用這種方法,它仍然不工作。它返回一個查詢並檢查':c0'的post_id,這是沒有意義的。我已經嘗試了硬編碼的價值,相同的結果。 –

+0

我正在接受你的答案,而總體上我的問題沒有解決,我的問題是。我做了一個'$ qt-> find() - > where(...)'並且打印了結果,並且得到了與你給我的結果完全相同的輸出結果。從'VotesTable.php'調用問題表時,一定會有錯誤 –

+0

當它在查詢中顯示':c0'時,您會看到如果查看查詢對象的調試,它會用':c0'替換參數, ':c1',':c2'等。這些引用查詢對象中的另一個數組,其中參數被清理。要查看參數是否正確,您需要查看':c0'在查詢對象中的值。 – BadHorsie

-2


結束如果你的列名是:

findByPost_id(2); 

看來,問題是其他地方的代碼:POST_ID,如下你應該使用它。例如,如果我的列名是:ITEM_STATUS,我會用這樣的:

// In the controller: 
$table = $this->loadModel('ProcessItems'); 
$result = $table->findByItem_status(100); 
+0

你測試了嗎?我不認爲這一個工作.. –