如果评论user_id = $ id,我希望获得所有项目(主题)及其评论.我尝试这样的东西,但它不起作用.因此,如果Item没有得到user_id = $ id的任何评论,那么我不需要这个项目.
在DiscussionsItem模型中我有方法:
public function discussionsComments() {
return $this->hasMany('DiscussionsComment', 'discussionsitem_id');
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中的查询是这样的:
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->with(['discussionsComments' => function($query) use ($id) {
$query->where('user_id', '=', $id);
}])
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}])
->orderBy('created_at', 'DESC')->get();
Run Code Online (Sandbox Code Playgroud)
我的问题是我得到了带注释的项目,其中注释为user_id!= $ id.
PS我需要5条评论,但我无法想象如何做到这一点,因为 - >在我急切的负载中采取(5)是行不通的.
我搞清楚了(工作代码):
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}]) …Run Code Online (Sandbox Code Playgroud) 我在数据库表中有这些时间戳列-到期,编辑,created_at。如果项目的“到期”日期大于今天的日期,则需要按“编辑”进行排序,否则,需要按“ created_at”进行排序。
我正在尝试类似的操作,但无法正常工作
$items = $items
->orderBy(DB::raw("CASE WHEN expiration >= $time THEN edit ELSE created_at END"), 'DESC')
->get();
Run Code Online (Sandbox Code Playgroud)
要么
$items = $items
->orderBy(DB::raw("CASE WHEN expiration >= $time THEN edit END"), 'DESC')
->orderBy('created_at', 'DESC')
->get();
Run Code Online (Sandbox Code Playgroud)
变量$ time是正确的,所以我的问题出在查询中。样本数据:
id name created_at expiration edit
1. it1 2015-03-16 15:42:40 0000-00-00 00:00:00 2015-03-16 15:42:40
2. it2 2015-03-16 15:37:27 2015-03-16 00:00:00 2015-03-16 15:37:27
3. it3 2015-03-16 12:36:50 2015-03-27 00:00:00 2015-03-16 14:52:19
Run Code Online (Sandbox Code Playgroud)
我需要按顺序-> it3,it1,it2
可变的$ time = 2015-03-17