Laravel Eloquent 复杂的地方

Posted

技术标签:

【中文标题】Laravel Eloquent 复杂的地方【英文标题】:Laravel Eloquent complex where 【发布时间】:2018-09-20 09:31:43 【问题描述】:

如何将此代码转换为 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.'%"))';

【问题讨论】:

我们可以看看你已经尝试过什么吗?谢谢 所有答案都可以在这里找到:laravel.com/docs/5.7/eloquent。尝试自己先解决它,然后,如果它仍然不起作用,请询问并向我们展示您到目前为止做了什么以及到底什么不起作用。 分享你的尝试? $query = DB::table('posts AS p') ->where('p.is_public',1); if (isset($date)) $query->where('p.created_at', '>', $date)); if (isset($search)) $search = '%'.$search.'%'; $query->where('p.title', 'like', $search) ->orWhere('p.body', 'like', $search) 【参考方案1】:

试试这个:

假设 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();

【讨论】:

【参考方案2】:

这是示例代码:假设 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();

【讨论】:

【参考方案3】:

你应该试试这个:

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

【讨论】:

以上是关于Laravel Eloquent 复杂的地方的主要内容,如果未能解决你的问题,请参考以下文章

如何将复杂的 sql 查询转换为 laravel Eloquent

复杂的 SQL / Laravel Eloquent 查询

Laravel Eloquent ORM "whereHas" 通过表

Laravel 从 Raw DB 到 Eloquent

Laravel五大功能之Eloquent关系模式

Laravel五大功能之Eloquent关系模式