簡體   English   中英

Laravel雄辯的情結在哪里

[英]Laravel Eloquent complex where

如何將此代碼轉換為Laravel(口才):

$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.'%"))';
}

嘗試這個:

假設Post是您的模型

$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();

這是示例代碼:假設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();

您應該嘗試這樣:

$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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM