【问题标题】:Laravel Many to Many How to form query in eloquent or in query builderLaravel 多对多如何在 eloquent 或查询构建器中形成查询
【发布时间】:2018-03-19 03:48:03
【问题描述】:

从以下查询中我得到了预期的结果:

SELECT *
    FROM rooms r
    JOIN amenities_room am 
      ON r.id = am.room_id 
    JOIN amenities a 
      ON am.amenities_id = a.id
     AND a.id IN (2,3)
GROUP BY r.id
  HAVING COUNT(*)=2;

我如何在(Eloquent 或 Query Builder)中以 laravel 方式进行查询

注意: 涉及以下表格:

房间
身份证
号码
姓名

设施
身份证
名字

amenities_room
房间号
便利设施_id

【问题讨论】:

  • rooms 有很多amenities? amenities` 属于amenities_room?!您应该编辑您的问题并告诉我们模型之间的关系。如果是 1:N 或 N:N。我建议你先阅读文档:laravel.com/docs/5.5/eloquent-relationships
  • 请接受任何解决了您的问题的答案以关闭此问题并投票支持任何/所有有助于解决您的问题的答案

标签: mysql laravel laravel-eloquent laravel-query-builder laravel-5.5


【解决方案1】:
$rooms = Room::with('amenities')
->withCount('amenities', function($query){
  $query->whereIn('id', [2, 3]);
})
->where('amenities_count', 2)
->get()

统计相关模型的文档:https://laravel.com/docs/5.5/eloquent-relationships#counting-related-models

【讨论】:

  • 很抱歉进行了编辑,必须做一些比我想象的更多的研究才能得到这个。
  • message": "mb_strpos() 期望参数 1 是字符串,给定对象" 收到此错误
【解决方案2】:

您收到此错误 mb_strpos() expects parameter 1 to be string, object given 因为您的 eloquent 需要一个字符串,但您在 withCount() 中传递了一个对象,试试这个

$rooms = Room::with('amenities')
->withCount('amenities')->where(function($query){
  $query->whereIn('id', [2, 3]);
})
->where('amenities_count', 2)
->get()

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2020-03-19
    • 2020-02-07
    • 2019-01-15
    • 2013-06-19
    • 1970-01-01
    • 2019-04-24
    • 2016-03-30
    • 2016-02-09
    相关资源
    最近更新 更多