【问题标题】:Laravel multiple query (PHP/MySQL)Laravel 多重查询 (PHP/MySQL)
【发布时间】:2023-03-26 05:13:01
【问题描述】:

我有一个名为 assignations 的表,其中存储了类别的 id 和分配给该类别的产品的 id。像这样:

我正在寻找的查询是获取所有未分配到特定类别的产品。例如,如果类别为 id=1,则查询必须返回产品 4、5 和 6。

这是我尝试过的代码,但我无法实现我想要的。

$assignations = Assignation::where('category_id', $id)->orderBy('position', 'Asc')->get();
$no_variants_assigned = Variant::whereNotIn('id', function ($query) use ($assignations) {
    $query->select('v.id')
          ->from('variants', 'v')
          ->where('v.id_product', $assignations->id);
})->orderBy('id_product', 'Asc')->get();

拜托,我希望有人可以帮助我。 谢谢

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    试试这个代码:

    $id[] = 1;
    
    $assigns =  array_unique(Assignation::whereNotIn('category_id', $id)->pluck('product_id')->toArray());
    $products = Product::whereIn('id', $assigns)->orderBy('id', 'Asc')->get();
    
    return $products;
    

    编辑:

    在获取数据之前添加了检查类别是否存在,所以代码应该是:

    $category = Category::findOrFail($id);
    $assigns =  array_unique(Assignation::where('category_id', $id)->pluck('product_id')->toArray());
    $variants = Variant::whereNotIn('id', $assigns)->orderBy('id_product', 'Asc')->get();
    

    【讨论】:

    • 这是不正确的,因为我想要所有未分配到特定类别的产品,并且在您的第一次查询中,您没有考虑到某些产品可能尚未分配到任何类别.
    【解决方案2】:

    @Pejman Kheyri 的答案不是我想要的,但他帮助我找到了解决方案:

    public function getCategoryVariantAssignation($id){
            $category = Category::findOrFail($id);
            $assignations = array_unique(Assignation::where('category_id', $id)->pluck('product_id')->toArray());
            $no_variants_assigned = Variant::whereNotIn('id', $assignations)->orderBy('id_product', 'Asc')->get();
            $data = ['category' => $category, 'variants' => $no_variants_assigned];
            return $data;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2014-10-28
      • 2018-03-13
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多