我想使用动态查找器方法。我在the documentation $this->Users->findByUsername
中看到了。我的问题是我的列名是post_id
,我不确定下划线如何影响我的动态查找器功能的名称。以下是我迄今为止尝试过的,似乎无法正常工作
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
答案 0 :(得分:2)
Cake会将下划线转换成pascal case字样,所以你会发现它是这样的:
$this->findByPostId();
这是正确的方法。
答案 1 :(得分:-2)
如果您的列名是: post_id ,则应按如下方式使用它:
findByPost_id(2);
问题似乎是代码中的其他地方。例如,如果我的列名是: item_status ,我会像这样使用它:
// In the controller:
$table = $this->loadModel('ProcessItems');
$result = $table->findByItem_status(100);