【问题标题】:Eloquent/Query Builder for more complicated table structuresEloquent/Query Builder 用于更复杂的表结构
【发布时间】:2015-04-18 19:15:10
【问题描述】:

好的,所以这可能不是世界上最大的问题,我相信有人能够帮助我解决我的问题所在。在我解决我的问题之前,这里有一些事实:

  • Laravel 5 & mysql
  • 我有 3 个主表:meetupseventslocations
  • 我还有一个数据透视表:event_location
  • 聚会hasMany活动
  • 活动belongsTo 聚会
  • 活动belongsToMany 地点
  • 地点belongsToMany活动

问题

我目前正在尝试搜索 位置(通过表单 - 即 Input::get('data')),这将显示所有具有该 事件位置,以及与该事件相关的所有聚会

在我的SearchController 中,我有以下内容:

// Get the searched data
$data = Input::get('data');

// Get all location, which are 'LIKE' the inputted data.
$locations = Location::where('title', 'LIKE', '%'. $data .'%')->get();

在这一点上,我不确定如何继续。我需要从每个位置访问事件,之后我需要获取与该位置对应的聚会,但我不知道如何去做。这可以用joins() 完成,还是我会遍历$locations 变量并为每个变量获取->events 并将它们放入一个数组中?或者,我应该使用DB:: 并运行自定义查询吗?

【问题讨论】:

  • 您是否已经正确设置了具有上述关系的模型?如果是这样,您应该能够让 Eloquent 使用类似于 Location::where( ... )->with('events.meetups')->get(); 的方式完成所有繁重的工作,这将基于 Location->events() 关系加入您的 Event 模型,以及基于 Event- 的 Meetup 模型>meetups() 关系。
  • 感谢@iavery,我确实必须将活动和聚会之间的关系更改为belongsToMany(),但这似乎解决了我的问题。雄辩太酷了!再次感谢您的帮助!
  • 这真是太棒了! :)

标签: mysql laravel join


【解决方案1】:

查看@iavery 的评论,当您拥有所有belongsToMany 关系时,似乎以下工作:

Location::where( ... )->with('events.meetups')->get();

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2015-05-12
    • 2018-08-12
    • 2019-08-11
    • 2015-06-15
    相关资源
    最近更新 更多