为了账号安全,请及时绑定邮箱和手机立即绑定

filter() 集合在子查询中不起作用

filter() 集合在子查询中不起作用

PHP
潇潇雨雨 2022-07-29 09:34:25
我正在尝试获取具有地址的用户,并且该地址的创建时间不应超过 7 天:$users = User::whereHas('address', function($q) {        $q->where(function ($query) {             $query->get()->filter(function ($address) {                 return Carbon::now() < Carbon::parse($address->getOriginal('created_at'))->addDays(7);             });         });     });作品正确,filter()但我无法返回其结果,我的结果是所有有地址的用户。
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

你可以whereDate这样使用:


$users = User::whereHas('address', function ($q) {

    $q->whereDate('created_at', '>', Carbon::now()->subDays(7));

})->get();


查看完整回答
反对 回复 2022-07-29
?
撒科打诨

TA贡献1934条经验 获得超2个赞

你可以试试这样

$user = User::where('address',date('Y-m-d', strtotime('-7 days')))->where('created_at',date('Y-m-d', strtotime('-7 days')))->get();



查看完整回答
反对 回复 2022-07-29
?
HUX布斯

TA贡献1876条经验 获得超6个赞

使用注释更改您的代码


$users = User::whereHas('address', function ($q): void {

    $q->where(function ($query): void {

        /**

         * Subqueries use Eloquent Builder class here to add some wrapped filters 

         * But your code takes all addresses, filter them for nothing

         * You should add SQL filters to builder something like that:

         **/

        $query->whereDate(Carbon::now()->subDays(7), '<', 'created_at');

    })

    /** To get users by your filters */

    ->get();


查看完整回答
反对 回复 2022-07-29
  • 3 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信