Обновить строку на 1 в CakePHP

Я искал этот вопрос и нашел много похожих ответов, подобных этому.

Обновить строку +1 в CakePHP

и вот как выглядит принятый ответ

$this-›Widget-›updateAll(

      array('Widget.numberfield' => 'Widget.numberfield + 1'),

      array('Widget.id' => 1)

);

Теперь я использую этот запрос в cakephp3. Вот как выглядит мой

$Questions=$this-›loadModel('Вопросы');

$Вопросы-›обновитьВсе(

       array('questions.trend' => 'questions.trend + 1'),

       array('questions.description' => $undashed_title)

);

Все работает нормально, и запросы выполняются, но когда я проверяю отладчик на наличие журнала sql, вот что я нашел

ОБНОВИТЬ вопросы УСТАНОВИТЬ questions.trend = 'questions.trend + 1' ГДЕ questions.description = 'Какой тип'

Но мое значение в базе данных не обновляется, как должно быть (я говорю это, потому что я также скопировал этот запрос на консоль phpmyadmin, и он не работает)

Я считаю, что запрос должен выглядеть так

ОБНОВИТЬ вопросы УСТАНОВИТЬ questions.trend = questions.trend+1 WHERE questions.description = 'What Type'

Любая помощь будет оценена, спасибо :)


person ravindar.dev    schedule 30.12.2014    source источник
comment
Я исправил версию с 2.x на 3.x, иначе вы сбиваете людей с толку, поскольку вы на самом деле используете 3.0!   -  person mark    schedule 30.12.2014
comment
Возможно, вам следует взглянуть на book.cakephp.org/ 3.0/en/orm/query-builder.html#raw-expressions   -  person Wesley Schleumer de Góes    schedule 30.12.2014
comment
не работает - довольно бесполезное описание проблемы... И сообщение об ошибке...?   -  person floriank    schedule 30.12.2014
comment
@UltimateProgrammer_BR: смотрю на это, спасибо, но опять же реальный вопрос: если это работает для других, почему не для меня?   -  person ravindar.dev    schedule 30.12.2014
comment
Это не работает ™, потому что CakePHP 3 кажется расходящимся запросом и значением, questions.trend + 1 - это запрос, и вы передаете его как значение, поэтому в конце оно становится значением. Вам нужно сказать ORM, что это запрос, а не значение.   -  person Wesley Schleumer de Góes    schedule 30.12.2014
comment
@burzum: я попытался объяснить каждый бит своего вопроса (по крайней мере, я так думаю), если вы посмотрите на него ясно. И сообщения об ошибке нет, но построитель запросов ORM построил запрос, который не работает.   -  person ravindar.dev    schedule 30.12.2014
comment
@UltimateProgrammer_BR: я думаю, что понял ваше объяснение проблемы, но опять же, как сказать ORM ?? Извините, я новичок в тортах!!   -  person ravindar.dev    schedule 30.12.2014


Ответы (1)


Что ж, как я уже сказал в комментариях, 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 и переместить инкремент на уровень модели.

person Wesley Schleumer de Góes    schedule 30.12.2014