【问题标题】:Consult in Laravel with Many to Many relationships在 Laravel 中咨询多对多关系
【发布时间】:2019-12-27 04:26:12
【问题描述】:

我需要一个 Eloquent 或简单 SQL 的查询,它可以为我提供 products 类别为 technology 并且属于 ID 为 7

这两种情况下的关系都是多对多的,其中每个 M-M 关系都有一个数据透视表,每个父表的 id

我希望你能帮助我。

【问题讨论】:

    标签: php mysql database laravel eloquent


    【解决方案1】:

    使用带有几个连接的直接 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;
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      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 的文档。

      【讨论】:

        猜你喜欢
        • 2019-02-07
        • 2018-11-02
        • 2015-05-29
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 2020-05-30
        • 2013-03-05
        • 2021-07-02
        相关资源
        最近更新 更多