【发布时间】:2019-12-27 04:26:12
【问题描述】:
我需要一个 Eloquent 或简单 SQL 的查询,它可以为我提供 products 类别为 technology 并且属于 ID 为 7
这两种情况下的关系都是多对多的,其中每个 M-M 关系都有一个数据透视表,每个父表的 id
我希望你能帮助我。
【问题讨论】:
标签: php mysql database laravel eloquent
我需要一个 Eloquent 或简单 SQL 的查询,它可以为我提供 products 类别为 technology 并且属于 ID 为 7
这两种情况下的关系都是多对多的,其中每个 M-M 关系都有一个数据透视表,每个父表的 id
我希望你能帮助我。
【问题讨论】:
标签: php mysql database laravel eloquent
使用带有几个连接的直接 sql,这看起来更干净。如果您需要除了 id 之外的任何信息,也可以加入产品,如果您只想要 id,请选择 pc.productId。
select * from provider p
join product_provider pp on p.id = pp.providerid
join product_categories pc on pc.productid = pp.productid
join categories c on c.id = pc.categoriesId
where c.name = 'technology';
就个人而言,我认为这在 sql 中看起来更干净。在pc.id 上匹配会比在名称上更好,如果您的设置允许,那么您可以将连接删除到categories。
编辑:
重新阅读问题后,似乎 id 正是您想要的,所以为了完整起见:
select pp.productId from provider p
join product_provider pp on p.id = pp.providerid
join product_categories pc on pc.productid = pp.productid
where pc.categoriesId = 7;
【讨论】:
你可以这样做:
use Illuminate\Database\Eloquent\Builder;
$products = Product
::whereHas('categories', function (Builder $query) {
$query->where('name', 'technology');
})
->whereHas('providers', function (Builder $query) {
$query->where('id', 7);
})
->get();
查看this section 的文档。
【讨论】: