Laravel Eloquent комплекс, где - PullRequest
       6

Laravel Eloquent комплекс, где

0 голосов
/ 20 сентября 2018

Как преобразовать этот код в Laravel (Eloquent):

$query = 'SELECT * FROM posts p WHERE (p.is_public = 1)';

if (isset($date)){ //$date format is '2018-09-01 00:00:00'
    $query .= ' AND (p.created_at > "'.$date.'")';
}

if (isset($search)){
    $query .= ' AND ((p.title LIKE "%'.$search.'%") OR (p.body LIKE "%'.$search.'%"))';
}

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Это пример кода: предположим, что Post является вашей моделью

$getPosts=Post::query()->where('is_public',1);

$getPosts->when(isset($date),function($q) use ($date){
    $q->where('created_at','>',$date);
 });

$getPosts->when(isset($search),function($q) use ($search){
    $q->where('title','like','%'.$search.'%');
    $q->orWhere('body','like','%'.$search.'%');
 });
$posts=$getPosts->get();
0 голосов
/ 20 сентября 2018

Вы должны попробовать это:

$query = Post::where('is_public', '1');

if (isset($date)){ //$date format is '2018-09-01 00:00:00'
    $query->where('created_at', '>', $date);
}

if (isset($search)){
    $query->whereRaw('title LIKE "%'.$search.'%" OR body LIKE "%'.$search.'%"');
}

$posts = $query->get();
0 голосов
/ 20 сентября 2018

попробуйте это:

Предположим, сообщение является вашей моделью

$posts = Post::where('is_public', 1);
if (isset($date)) { 
    $posts->where('created_at', '>', $date);
}
if (isset($search)) {
    $posts->where(function($query) use ($search) {
                 $query->where('title', 'like', "%'.$search.'%")
                  ->orWhere('body', 'like', "%'.$search.'%");
             });
}
$posts = $posts->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...