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))
来获取计数(本机phpcount()
函数)。如果您离开get()
,您将返回一个Laravel集合(),因此您可以使用->count()
而不是使用本机PHP函数来实现更面向对象的方法。等等,读错了。是的,你是对的<代码>集合
有一个count()
方法,所以有3种方法。当在carbon中使用>=时,我得到代理和用户的值1(但它在user下只有一条记录)!但当我使用=时,两个值都为0!我做错了什么?