CakePHP 3带有下划线的动态查找器

时间:2017-01-25 23:44:29

标签: php cakephp cakephp-3.0

我想使用动态查找器方法。我在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

结尾

2 个答案:

答案 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);