Конвертировать SQL Запрос в Laravel Запрос - Laravel 7 - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть запрос

SELECT * FROM visitors WHERE created_at > DATE_SUB(NOW(), INTERVAL 1 WEEK);

Он работал отлично. Я пытаюсь преобразовать его в Laravel запрос

$visitors = DB::table('visitors')->select(DB::raw('*'))
            ->whereRaw('created_at > DATE_SUB(NOW(), INTERVAL 1 WEEK')->get();

Я продолжал получать ошибку

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей MySQL версии сервера, для правильного синтаксиса для использования рядом с '' в строке 1 (SQL: выберите * из visitors, где create_at> DATE_SUB (NOW () = INTERVAL 1 WEEK)

enter image description here

Может кто-нибудь помочь?

1 Ответ

2 голосов
/ 13 апреля 2020

В запросе SQL отсутствует ")", поэтому он не связан с Laravel.

$visitors = DB::table('visitors')->select(DB::raw('*'))
        ->whereRaw('created_at > DATE_SUB(NOW(), INTERVAL 1 WEEK)')->get();

Но почему вы используете raw SQL вместо Carbon?

$visitors = DB::table('visitors')->select(DB::raw('*'))
        ->where('created_at', '>', now()->subWeek())->get();

Также было бы неплохо сделать модель Visitor (https://laravel.com/docs/7.x/eloquent)

namespace App;

use Illuminate\Database\Eloquent\Model;

class Visitor extends Model
{
   //
}

И тогда ваш красноречивый запрос будет выглядеть так

$visitors = Visitor::where('created_at', '>', now()->subWeek())->get();
...