【问题标题】:Multiple Conditions in laravel Relationslaravel 关系中的多个条件
【发布时间】:2018-09-17 14:38:56
【问题描述】:

我有两个表,一个是 User 表,另一个是 Booking 表(它基本上是一个订票应用程序)。

用户表:

userid    usertype
  01      normal
  02      agent
  03      normal
  ...      ...

在预订表中:

bookingid    userid    createdAt    updatedAt
   01         01       01-09-2018   17-09-2018
   02         03       31-08-2018   12-09-2018
  ...        ...          ...          ...

我需要做的是过滤用户和代理今天(尤其是今天)完成的预订总数。所以我在用户和预订表之间建立了如下关系:

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

和用户模型:

public function bookings()
{
    return $this->hasMany('App\Booking', 'userid');
}

现在我需要通过将usertype 过滤为正常和代理来获取今天的总预订量。例如 - 用户或代理今天完成的预订总数(在预订表上)(通过检查预订表中的用户 ID,我需要确定其代理或普通用户)以便我可以获得普通用户预订的票数还有代理。

我使用的控制器代码是:

$booking = Booking::all();
$users = User::all();
$ticketUserToday = Booking::with('users')->get()->where(['usertype','=','agent'],['createdAt','>=',Carbon::Today()]);

但是当 dd 时我得到 null 值。

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    使用->get()后跟->where()与查询数据库不一样;它将尝试过滤您从Booking::get() 获得的Bookings 中的Collection,这就是您获得null 的原因;由于BuilderCollection 类之间的->where() 函数签名不同,它无法正确过滤。

    您要查找的是您的Users 角色上的->whereHas(),以及您的Booking 表上的->where()

    $ticketsToday = Booking::with(["users"])
    ->where("createdAt", ">=", Carbon::today())
    ->whereHas("users" => function($subQuery){ 
       $subQuery->where("usertype", "=", "agent");
    })->get();
    

    这将做的是查询您的Booking 表以获取正确的日期,然后将该结果限制为具有一个或多个Usersusertype 的“代理”。

    【讨论】:

    • 哇,它工作得非常好!现在我该怎么算?通过在查询末尾添加 count() ?
    • 结合不同的方式;如果您将->get() 替换为->count(),那么您可以执行dd($ticketsToday) 并获得一个号码。如果你离开->get(),那么你可以做dd(count($ticketsToday))来获取计数(原生phpcount()函数)
    • 如果你离开get(),你会得到一个Laravel collection(),所以你可以在它上面使用->count(),而不是使用原生的PHP函数来实现更面向对象的方法。
    • 等等,读错了。是的,你是对的; Collections 有一个 count() 方法,所以有 3 种方法。
    • 在碳中使用 >= 时,代理和用户的值都为 1(但因为它在用户下只有一条记录)!但是当我使用 = 时,两者的值都为 0 !我做错了什么?
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2021-10-09
    • 2020-10-24
    • 2013-11-13
    • 2021-08-30
    相关资源
    最近更新 更多