2017-01-25 4 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) 

ワーキングように見えることはできませんすることは、私はそれがクエリを出力し$questionログインすると自分のコードが

//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); 
     } 
    } 
} 

次のようになりますオブジェクトではなく、クエリを実行できません。あなたの列名がある場合、それはWHERE 'questions'.'post_id' = :c0

+2

ここにコード全体を投稿してください。ダイナミックローダーを使うときは 'findByPostId'を使います。それは他のどこかにあるはずです。 – spencdev

答えて

2

ケーキは、ケースの単語をパスカルアンダースコアに変換されますので、あなたはこのようにそれを見つける:

$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

テストしましたか?私はこの1つが働くとは思わない。 –