例如,我可以查看具体日期的每个帖子。
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', '2015-01-01 00:00:00');
})->get();
但是假设,如果我想将帖子模型日期(created_at)与用户模型的日期属性进行比较,该怎么办?
例如:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', ** $user->customDate ** ← look this);
})->get();
UPD。 我在Laravel之外使用Eloquent。
答案 0 :(得分:3)
您可以使用$users = User::whereHas('posts', function($q){
$q->whereRaw("created_at >= users.customDate");
})->get();
在Eloquent子查询中使用原始表达式。
在你的例子中:
DB::raw
与Illuminate\Database
不同,这可以在没有Laravel依赖注入{{1}}外观的情况下使用。
答案 1 :(得分:1)
假设您的用户表名为users
,您可以使用DB::raw()
引用一个值,就像在普通查询中一样:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', DB::raw('users.customDate'));
})->get();
不要忘记导入DB
外观或只是将其更改为\DB::raw(...)
。
如果你在Laravel外面使用这个并且没有外墙你可以切断中间人并做:
$q->where('created_at', '>=', new Illuminate\Database\Query\Expression(('users.customDate'));
希望这有帮助!