2017-01-25 10 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

торт преобразует подчеркивание Паскаля регистра слов, так что вы нашли это следующим образом:

$this->findByPostId(); 

Это правильный способ сделать это.

+0

Я пробовал использовать этот метод, и он все еще не работает. Он возвращает запрос и проверяет post_id ': c0', что не имеет смысла. Я пробовал жесткую кодировку в ценности, те же результаты. –

+0

Я отмечаю ваш ответ как принятый, в то время как общая моя проблема не решена, мой вопрос. Я сделал '$ qt-> find() -> where (...)' и напечатал этот результат, и получил тот же результат, что и я, с тем, что вы мне дали. Что-то должно быть неправильно при вызове таблиц вопросов из 'VotesTable.php' –

+0

Когда в запросе указано': c0', вы увидите, если вы посмотрите на отладку объекта запроса, он заменяет параметры ': c0', ': c1',': c2' и т. д. Они относятся к другому массиву в объекте запроса, где параметры дезинфицируются. Чтобы убедиться, что параметр правильный, вам нужно увидеть, что значение ': c0' находится в объекте запроса. – BadHorsie

-2


Если имя столбца: post_id, вы должны использовать его следующим образом:

findByPost_id(2); 

Кажется, что проблема где-то еще в коде. Например, если мое имя столбца: item_status, я хотел бы использовать его как это:

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

Вы проверили это? Я не думаю, что это работает. –