1

从下列查询即时得到预期的结果形成查询:Laravel多对多如何雄辩或查询生成器

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; 

如何为中(口才或查询生成器在laravel方式查询)

注: 下表涉及:

客房
ID


设施
ID

amenities_room
ROOM_ID
amenities_id

+0

'rooms'有很多'设施? 'amenities'属于'amenities_room' ?!你应该编辑你的问题,并告诉我们模型之间的关系。如果是1:N或N:N。我建议你先阅读文档:https://laravel.com/docs/5.5/eloquent-relationships –

+0

请接受任何解决您的问题的答案,以关闭此问题,并upvote任何/所有答案已帮助解决您的问题问题 –

回答

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

文档计数相关机型:0因为你的口才期待一个字符串

+0

对编辑抱歉,不得不做一些比我想得到的更多的研究。 – Jeff

+0

消息“:”mb_strpos()期望参数1是字符串,对象给出“得到这个错误 –

0

你得到这个错误mb_strpos() expects parameter 1 to be string, object given但你在这里withCount()传递的对象试试这个

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