laravel关系中的多重条件

laravel关系中的多重条件,laravel,laravel-5,Laravel,Laravel 5,我有两个表,一个是用户表,另一个是预订表(它基本上是一个订票应用程序) 用户表: userid usertype 01 normal 02 agent 03 normal ... ... 在预订表中: bookingid userid createdAt updatedAt 01 01 01-09-2018 17-09-2018 02 03 3

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

用户表:

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.

使用
->get()
后跟一个
->where()
与查询数据库不同时,我得到了
null
值;它将尝试过滤您从
Booking::get()
获得的
预订的
集合
,这就是您获得
null
的原因;由于
生成器
集合
类之间的
->where()
函数的签名不同,它无法正确过滤

您要查找的是您的
用户
角色上的
->where has()
,以及您的
预订
表上的
->where()

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

这将要做的是查询您的
预订
表中的正确日期,然后将该结果限制为任何有一个或多个
用户
用户类型
为“代理”的用户。

!现在我该怎么计算呢?通过在查询的末尾添加count(),可以使用两种不同的方法;如果将
->get()
替换为
->count()
,则可以执行
dd($ticketsToday)
并获取一个数字。如果您离开
->get()
,那么您可以执行
dd(count($ticketsToday))
来获取计数(本机php
count()
函数)。如果您离开
get()
,您将返回一个Laravel集合(),因此您可以使用
->count()
而不是使用本机PHP函数来实现更面向对象的方法。等等,读错了。是的,你是对的<代码>集合
有一个
count()
方法,所以有3种方法。当在carbon中使用>=时,我得到代理和用户的值1(但它在user下只有一条记录)!但当我使用=时,两个值都为0!我做错了什么?