我想查询数据库以检索在开始日期之后没有创建注释的所有事件。 EVENT和COMMENT的以下结构
EVENT
id
start
created_at
updated_at
COMMENT
id
comment
event_id
created_at
updated_at
创建一个查询($ query = Event :: query()-> with('comments');),该查询提供了以下结构。
[{
"id": 1,
"start": "2018-06-18 12:00:00",
"created_at": "2018-06-18 11:50:07",
"updated_at": "2018-07-02 12:13:15",
"comments": [
{
"id": 1,
"created_at": "2018-06-18 12:44:35",
"updated_at": "2018-06-18 12:44:35",
"comment": "cascsac"
}
]
}]
我想检索所有在事件开始日期之后comment.created_at的条目。我尝试了以下方法:
$query->orWhere(function ($query) {
$value = $query->where(function ($query) use ('start') {
$query->whereHas('comments', function ($query) use ('start') {
$query->where('created_at','<=','start');
//->whereColumn('created_at', '<=', 'start');
});
});
});
但是它不喜欢我尝试将start传递给嵌套查询,并且不确定如何将它传递给whereColumn查询。
如何将值从列传递到嵌套位置。 或如何使用另外一列的值查询a。
编辑1
应要求提供整个查询
$ query
Event::query()->with('comments');
$query->orWhere(function ($query) {
$value = $query->where(function ($query) use ('start') {
$query->whereHas('comments', function ($query) use ('start') {
$query->where('created_at','>=','start');
//->whereColumn('created_at', '>=', 'start');
});
});
});
$events = $query->get();
传递变量$ start也可以,但是我无法将start的列值转换为变量$ start来传递嵌套查询
答案 0 :(得分:0)
错误的代码是'start'>必须是$ start
$start = Carbon::now()->subYears(100); // for examplee
$query->orWhere(function ($query) {
$value = $query->where(function ($query) use ($start) {
$query->whereHas('comments', function ($query) use ($start) {
$query->where('created_at','<=', $start);
//->whereColumn('created_at', '<=', $start);
});
});
})
答案 1 :(得分:0)
在https://laracasts.com/discuss/channels/eloquent/querybuilder-pass-column-to-nested-query上回答
$events = Event::with('comments')->whereHas('comments',function ($query) {
$query->whereColumn('comments.created_at','<','events.start');
})->get();
whereColumn是用于比较查询中的列的函数。