Вы можете делать то, что вы хотите, с помощью inner join
, который, кажется, то, что вы пытаетесь. Вам просто нужно inner join
дважды:
select p.*
from products p join
product_tags pt1
on pt1.product_id = p.id and pt1.tag_id = 1 join
product_tags pt2
on pt2.product_id = p.id and pt2.tag_id = 2;
Это может быть проще для кодирования в Laravel.
Ваша версия не работает, поскольку тег не может быть одновременно "1" и «2» одновременно - он может иметь разные строки с этими значениями, но только одно значение на строку.
Кроме того, таблица tags
не требуется для запроса.