Laravel Eloquent:如何通过whereHas()方法获取相关记录?
例如,我可以用具体的日期检查每个帖子Laravel Eloquent:如何通过whereHas()方法获取相关记录?,laravel,eloquent,Laravel,Eloquent,例如,我可以用具体的日期检查每个帖子 $users = User::whereHas('posts', function($q){ $q->where('created_at', '>=', '2015-01-01 00:00:00'); })->get(); 但是假设,如果我想将post model日期(created_at)与user model的date属性进行比较,该怎么办 例如: $users = User::whereHas('posts', functi
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', '2015-01-01 00:00:00');
})->get();
但是假设,如果我想将post model日期(created_at)与user model的date属性进行比较,该怎么办
例如:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', ** $user->customDate ** ← look this);
})->get();
$users = User::whereHas('posts', function($q){
$q->whereRaw("created_at >= users.customDate");
})->get();
upd。
我在拉威尔之外使用雄辩的语言 假设您的用户表刚刚被称为
users
,您可以使用DB::raw()
像在普通查询中一样引用一个值:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', DB::raw('users.customDate'));
})->get();
不要忘记导入DB
facade,或者将其更改为\DB::raw(…)
如果您在Laravel之外使用此工具,并且没有正面,您可以删除中间商并执行以下操作:
$q->where('created_at', '>=', new Illuminate\Database\Query\Expression(('users.customDate'));
希望这有帮助 您可以使用
$q->whereRaw
在雄辩的子查询上使用原始表达式
在您的示例中:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', ** $user->customDate ** ← look this);
})->get();
$users = User::whereHas('posts', function($q){
$q->whereRaw("created_at >= users.customDate");
})->get();
与
DB::raw
不同,这可以在没有Laravel对light\Database
facade的依赖注入的情况下使用。customDate是用户表中的一个字段吗?是的,MySQL日期字段类型有什么意义?你想达到什么目的?例如,我想在具体的一天获得所有的帖子,这是为具体的用户定义的。嗯,你的方法在这种情况下有效吗?ScheduledEvent::find(1)->orders->where('dateFrom','=',ORDER\u CUSTOM\u DATE)@斯坦尼斯拉夫什么?!?这是一个类似的任务,在where条件下,where需要通过concrete order.customDate从相关orders表中获取记录。我有一个问题-我使用Laravels之外的雄辩,没有数据库管理器的facades和raw()方法。也许你知道其他的解决方法?很抱歉。当你用Laravel
标记问题时,我假设你使用的是Laravel。我假设你有整个illumb\Database
包?