Найти дату старше 15 дней в laravel

мне нужно показать сравнить дату доставки, если она истекла через 15 дней, а также показать track_track_status = 0 по умолчанию. когда я это делаю, выдает ошибку

Столбец ошибки не найден: 1054 Неизвестный столбец ''delivery_date' + INTERVAL 15 DAY ‹ NOW()' в предложении 'where

$secondstatus = DB::table('registrations')
            ->join('ssi_tracks', 'registrations.registration_id', '=', 'ssi_tracks.registration_id')
            ->select('ssi_tracks.ssi_track_id', 'address', 'model', 'chassis', 'delivery_date','ssi_tracks.track_second_status')
            ->where([["ssi_tracks.track_second_status", "=", 0]])
             ->orWhereRaw('registrations.delivery_date + INTERVAL 15 DAY <= NOW()')

            ->get();

person Community    schedule 28.04.2018    source источник
comment
Вам нужен необработанный запрос, так как вы используете функцию SQL. Взгляните на laravel.com/docs/5.6/queries#raw-expressions   -  person Joel Hinz    schedule 28.04.2018
comment
Позволь мне проверить   -  person    schedule 28.04.2018
comment
Теперь я сделал так, теперь он показывает все, и я изменил дату, но показывает только все @JoelHinz   -  person    schedule 28.04.2018
comment
Можете ли вы написать запрос без фреймворка? См. meta.stackoverflow.com/questions/333952/   -  person Strawberry    schedule 28.04.2018


Ответы (3)


Используйте Carbon с laravel orWhere вместо этого

->orWhere( 'delivery_date', '<=', Carbon::now()->subDays(15))
person Niklesh Raut    schedule 28.04.2018
comment
Это более элегантное решение. - person Tudor; 28.04.2018
comment
Входит ли Carbon в Laravel? - person Sand Of Vega; 28.04.2018
comment
но он ничего не возвращает, я меняю дату, но ничего не отображается в таблице данных @ C2486 - person ; 28.04.2018
comment
Ошибка не отображается для проверки, я попробовал комментарий -›where([[ssi_tracks.track_second_status, =, 0]]) эту часть и изменил мою дату, но ничего не показывает @C2486 - person ; 28.04.2018
comment
@Abhijith: код, которым вы поделились, ничего не перенастроил. можешь проверить return dd($secondstatus); и поделитесь, что у вас получилось? - person Niklesh Raut; 28.04.2018
comment
не старше 15 дней означает <= в сравнении? - person apokryfos; 28.04.2018
comment
@apokryfos: да, вы правы, он должен <= получить предыдущие данные. - person Niklesh Raut; 28.04.2018
comment
Какой Carbon следует использовать Illuminate\Support\Carbon или Carbon\Carbon? - person Sand Of Vega; 28.04.2018
comment
@Abhijith: проверьте свой запрос после изменения >= на <= - person Niklesh Raut; 28.04.2018
comment
@SandOfVega: вы можете использовать use Carbon\Carbon; - person Niklesh Raut; 28.04.2018

используйте необработанный запрос, как показано ниже:

$now = \Carbon\Carbon::now();

->orWhere(DB::raw(registrations.delivery_date + INTERVAL 15 DAY, "<=", $now))

проверьте это и ответьте здесь, если он возвращает какую-либо ошибку.

person vahiiiid    schedule 28.04.2018
comment
Вы пропустили две вещи: 1-й, используя or в условии where и 2-й = в запросе для сравнения дат. - person Niklesh Raut; 28.04.2018

Просто сделать:

$secondstatus = DB::table('registrations')
            ->join('ssi_tracks', 'registrations.registration_id', '=', 'ssi_tracks.registration_id')
            ->select('ssi_tracks.ssi_track_id', 'address', 'model', 'chassis', 'delivery_date','ssi_tracks.track_second_status')
            ->where([["ssi_tracks.track_second_status", "=", 0]])
             ->orWhere('registrations.delivery_date', '<=', \DB::raw("NOW() - INTERVAL 15 DAYS")))    
            ->get();

Проблема в том, что построитель запросов будет псевдонимом имени таблицы и будет, но не будет псевдонимом, если он находится в пределах whereRaw

person apokryfos    schedule 28.04.2018