mysql - 最不受欢迎的事件 - 获取预订为空或最少的事件列表

标签 mysql database laravel laravel-5

我有两个表:事件和预订 一场事件有多个预订

Event          Bookings
  1               1
  1               2
  1               3
  2               //consider this as no row in bookings table
  3               4
  3               5
  3               6
  4  

I need to get list of events that have no bookings, that is there is no foreign key reference of events_id in bookings table. so here Event 2 and 4. If all the events have some bookings then the one with least bookings shows up.

$query = select E.id, E.name, 
count('B.event_id')
as totalbookings
from events E, bookings B where E.id = B.event_id 
group by B.event_id;

获取所有事件的列表以及包含部分预订的事件的总预订量。

如何获取根本没有预订的事件数据?

最佳答案

好的。那么,您需要获取没有预订的事件吗?让我们看看这里的一些解决方案。

我们可以使用 Eloquent 来完成类似的事情。

假设您有一个包含以下方法的事件模型:

public function bookings()
{
return $this->hasMany(Bookings::class, 'FK', 'PK');
}

以及一个包含以下方法的 Bookings 模型:

public function event()
{
return $this->belongsTo(Event::class, 'FK', 'PK');
}

您可以在 Controller 中执行类似的操作:

$events = 事件::whereHas('bookings')->get()->count();

这将获取所有与预订相关的事件的集合并对其进行计数。这 Eloquent 地解决了一个问题,现在针对没有预订的事件。

Laravels Eloquent ORM 没有我们可以使用的 hasNot 方法,但是我们可以使用 Eagarloading 约束来实现您需要的结果。

我们可以通过执行以下操作来获取所有没有预订的事件:

$events = Events::whereHas("bookings", function($q) {
  $q->whereNotNull('deleted_at');
}, '<', 1)->get();

我相信这应该为您提供所有没有预订的事件的集合。

让我知道你过得怎么样!

关于mysql - 最不受欢迎的事件 - 获取预订为空或最少的事件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822652/

相关文章:

mysql - 添加或添加外键约束的约束

ios - 核心数据 : How do I add additional entities to an existing many-to-many relationship

python - 带有字符串值的 codernitydb 索引

jquery - 如何使用 laravel 在 jquery fullcalendar 中存储拖动事件

laravel - 在 laravel 查询构建器上添加过滤功能

php - Laravel 未定义数组键 1 php artisan 服务

Mysql 替换存储在数据库中的文件扩展名

php/sql-如何在变量上使用 LIKE 运算符从数据库中提取结果?

mysql - 将 sql 转储导入 mySQL Workbench 时出现错误 1305

sql - MySQL 服务器已消失错误