Laravel Eloquent:如何通过whereHas()方法获取相关记录?

时间:2016-12-30 22:34:06

标签: laravel eloquent

例如,我可以查看具体日期的每个帖子。

$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。

2 个答案:

答案 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'));

希望这有帮助!