Проблема при преобразовании Carbon::now() в DateTimeString() в Laravel

В моем коде у меня есть такой раздел.

->whereDate('published_at', '<=', (Carbon::now())->toDateTimeString())

Этот запрос отлично работал на моей машине разработки (homestead), поэтому я отправил его на сервер разработки (aws).

Но у меня возникла проблема.

синтаксическая ошибка, непредвиденный '->' (T_OBJECT_OPERATOR)

Однако я решил эту проблему и нашел проблему. Я хотел изменить запрос, например

->whereDate('published_at', '<=', Carbon::now()->toDateTimeString())

Разница только в том, что вместо (Carbon::now())->toDateTimeString()) теперь я использую Carbon::now()->toDateTimeString()) без окружающих скобок. Теперь в обеих средах мой код работает.

Версии PHP в Homsetead и Aws следующие:

вывод php -v на Усадьбе

PHP 7.1.0-2+deb.sury.org~xenial+1 (cli) ( NTS )

вывод php -v на aws

PHP 5.6.29 (cli) (built: Jan 18 2017 19:08:44) 

Я могу думать только о том, что эта проблема возникает из-за разницы в версии php.

Но меня смущает, как удаление квадратных скобок заставило мой код работать. Ценим ваш вклад в это. Спасибо!


person Gayan    schedule 07.02.2017    source источник
comment
Это точно происходит из-за разных версий PHP   -  person KuKeC    schedule 07.02.2017


Ответы (1)


(Carbon::now())->toDateTimeString() это то, что вам никогда не нужно делать. Единственный раз, когда я использовал бы круглые скобки, как это, если бы я обновлял класс.

Carbon::now()->toDateTimeString() это правильный путь.

При этом с конструктором запросов Laravel вам вообще не нужно добавлять toDateTimeString().

Вы должны быть в состоянии просто:

->whereDate('published_at', '<=', Carbon::now())

Надеюсь это поможет!

person Rwd    schedule 07.02.2017
comment
Спасибо за ваш вклад. Я действительно внес это изменение и исправил свой запрос, прежде чем опубликовать эту проблему. Меня беспокоят скобки, так как код работал в усадьбе. Он сломался только тогда, когда я вставил его на сервер aws. - person Gayan; 07.02.2017
comment
@Gayan просто не используйте скобки в этой ситуации, так как в этом нет никакой пользы. Как я сказал в своем примере, для ситуаций, основанных на классах, я бы использовал их только для чего-то вроде (new SomeClass)->someMethod(). - person Rwd; 07.02.2017