【问题标题】:how to get the data using whereHas clauses and relationship?如何使用 whereHas 子句和关系获取数据?
【发布时间】:2020-08-28 05:27:48
【问题描述】:

用户表

id
email
password

成员表

id
user_id
expiry_date
delivery_day_innum(eg:like 7,8 days)

deliverdetailes 表

id
user_id
created_at
updated_at

商品表

id
user_id
name
qty

商品表

id
user_id
name
qty

关系

user->hasOne(Membership::class)
user->hasMany(Deliverdetailes::class)
user->hasMany(Goods::class)

现在,我想获取帐户未过期且deliver_day_innum 等于 当前日期与最新 created_at 日期之间的差异

【问题讨论】:

  • 你到底想要什么??符合条件的用户各自的商品?
  • 是的,你是对的@hitler_jr10

标签: laravel eloquent wherehas


【解决方案1】:
$myGoods= Goods::join('user','user.id','goods.user_id')
->join('membership','membership.user_id','=','user.id')
->join('deliverdetailes','deliverdetailes.user_id','=','user.id')
->whereDate('expiry_date','>',Carbon::now())
->whereRaw('DATEDIFF(maxDate, CURDATE())=membership.delivery_day_innum')
->select('goods.*',DB::raw('max(deliverdetailes.created_at) as maxDate'))->get();

【讨论】:

  • 你介意用 ORM 写吗?我很欣赏你的工作
  • 一般是ORM,除了两次使用“raw”外,必须使用mysql的(DATEDIFF ,max)函数,而对于'join'是必须的,我不知道其他方法它没有加入。
  • 您可以使用高级查询,但复杂性相同:laravel.com/docs/7.x/eloquent#advanced-subqueries
【解决方案2】:

第一个问题:未过期账户的商品:

调整 Carbon::now() 以匹配 expiry_date 的日期格式。

   $goods = Good::whereHas('user.membership', function($query){
       return $query->where('expiry_date', '<=', Carbon::now());
   })->get();

App\Good 中的必需项:与 App\User 的关系。

public function user()
{
    return $this->belongsTo('App\User');
}

第二个问题:请澄清:“deliver_day_innum 等于当前日期与最新 created_at 日期之间的差”。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2019-11-17
    • 1970-01-01
    • 2020-12-09
    • 2015-03-25
    • 2018-09-17
    • 2018-06-19
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多