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