当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩而多形连接

寇甫
2023-03-14

我有一些Laravel多态模型,其中包括一个用户模型,可以有许多预订日历条目,可以有许多假日条目。我可以编写下面的SQL查询来提取所需的数据,但要与雄辩的查询版本作斗争。也许这是我的模型关系,或者我对拉拉维尔事物如何运作的理解。我有一些雄辩的查询确实有效,但是,它们非常低效,当我调查时,会使用许多选择,而不仅仅是一个。

我的SQL:

select hol.* 
from booking_calendar bc
join holidays hol 
on bc.booked_by_id = hol.id
where bc.model_type='App\Staff'
and bc.model_id=123
and bc.booked_by_type='App\Holiday'

数据库表:

Staff: (App\Staff)
  id                    123
  ...

booking_calendar: (App\BookingCalendar)
  model_id              123
  model_type            App\Staff
  ...
  booked_by_id          77
  booked_by_type        App\Holiday

holidays: (App\Holiday)
  id                   77
  ...

我想我的问题的症结在于预订日历有两个多态关系,因为它也用于资产预订。

我想做的是$工作人员-

如果有人能在一个不是原始SQL语句的雄辩select语句中解释如何做到这一点,我将不胜感激。

共有1个答案

耿学义
2023-03-14

我根据你的数据库设计假设关系。

工作人员

假日

员工模型

public function bookingCalendars(){
   return $this->morphMany(App\BookingCalendar::class, 'model');
}

假日模型

public function bookingCalendars(){
   return $this->morphMany(App\BookingCalendar::class, 'booked_by');
}

Booked日历模型

public function model(){
   return $this->morphTo();
}

public function booked_by(){
   return $this->morphTo();
}

filterpull是采集方法。

$staff = Staff::with('bookingCalendars.model')->find($id);

$filtered_bks = $staff->bookingCalendars->filter(function($bk){
   return $bk->model_type == 'App\Holiday';
});

$holidays = $filtered_bks->pluck('model');
 类似资料:
  • 我正在使用Laravel和它提供的雄辩的ORM,但我正在努力选择我需要的数据。我有两种型号 我该怎么做?

  • 我有许多对许多用户与城市地区之间的联系。我也有连接城市区域的区域(一个城市区域只能连接一个区域)。 我有这样的数据库结构: 使用者 id 城市地区 id 姓名 area_id 城市用户 id cityarea_id user_id 地区 id 姓名 接下来我有模特 用户 城市地区 地区 问题: 如何让所有用户与雄辩? 谢谢!!

  • 在我的应用程序中,我更新了从一对多到多对多的关系,我试图找出一种持久化关联功能的方法。 假设我有两个相关的表,例如狗和主人。如果我有一系列的主人,并且我正试图为这些主人获取一份狗的id列表,我应该如何雄辩地做到这一点? 这里也提出了类似的问题:https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-da

  • 如何使用laravel雄辩的ORM关系在多个表中发出一个插入请求。即 表1:用户 id 姓名 电子邮件 表2:员额 id 表3:图像 id 用户id 邮政id 图像名称 关系 表id引用了其他两个表中的 表与

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 如何制作一对多访问器? 用户模型: 历史模型: 如果我真的喜欢下面,它将工作。 用户模型: 历史模型: 控制器: 刀片视图: 它起作用了! 但是,我应该怎么做,如果我想要这个: 我喜欢 历史模型: 它不工作! 如果我编码像 它会回来的 此集合实例上不存在属性[happy]。 如果我编码像 它会回来的 未定义的属性:Illumb\Database\Eloquent\Relations\HasMany