Я искал этот вопрос и нашел много похожих ответов, как этот
и вот как выглядит принятый ответ
$ This-> widget-> UpdateAll (
array('Widget.numberfield' => 'Widget.numberfield + 1'), array('Widget.id' => 1)
);
Теперь я использую этот запрос в cakephp3.
Вот как выглядит моя
$ Вопросы = $ this-> loadModel ( ‘Вопросы’);
$ Вопросы-> UpdateAll (
array('questions.trend' => 'questions.trend + 1'), array('questions.description' => $undashed_title)
);
Все работает нормально, и запросы выполняются, но когда я проверяю отладчик для журнала SQL, вот что я нашел
ОБНОВЛЕНИЕ вопросов SET SET questions.trend = ‘questions.trend + 1’ ГДЕ questions.description = ‘Какой тип’
Но мое значение в базе данных не обновляется, как должно быть
(Я говорю это, потому что я также скопировал этот запрос на консоль phpmyadmin и он не работает)
Я считаю, что запрос должен выглядеть следующим образом
ОБНОВЛЕНИЕ вопросов SET SET questions.trend = questions.trend + 1 ГДЕ questions.description = ‘Какой тип’
Любая помощь будет оценена, спасибо 🙂
Ну, как я уже сказал в комментариях, CakePHP 3 расходятся value
из expression
и то, что вы пытаетесь сделать, это увеличение expression
, чтобы решить свою «проблему», вы должны копаться в документации CakePHP, и поэтому вы найдете это http://book.cakephp.org/3.0/en/orm/saving-data.html#bulk-updates, да, именно то, что вы хотите. Итак, это становится:
// load your beloved model
$questions = $this->loadModel('Questions');
// create a beauty expression
$expression = new QueryExpression('questions.trend + 1');
// execute a update with the beauty expression
$questions->updateAll(
array('questions.trend' => $expression),
array('questions.description' => $undashed_title)
);
И не забудьте загрузить QueryExpression
пространство имен с use Cake\Database\Expression\QueryExpression;
,
Да, это неправильный способ сделать в CakePHP 3, вы должны использовать ORM CakePHP и переместить элемент приращения на уровень модели.
Других решений пока нет …