如何在Laravel 5.4中使用'Where Not In'?

时间:2017-05-16 19:14:28

标签: sql laravel

我正在尝试创建一个查询,我从表中获取数据并使用INNER JOIN和Where Not In,我能够调整INNER JOIN部分,但在'WHERE NOT IN'我尝试使用'WhereNotIn来自Laravel 5.4。但它返回错误:为foreach()提供的参数无效

SELECT
        em.erp_mlbid AS category_id

            FROM 
                erp_product AS ep
            INNER JOIN
                erp_product_category AS epc ON epc.erp_productid = ep.erp_productid
            INNER JOIN
                erp_mlbcategory_erpcategory AS emc ON emc.erp_categoryid = epc.erp_categoryid
            INNER JOIN
                erp_mlb_category AS em ON em.erp_mcid = emc.erp_mlbcategoryid    
            WHERE
                ep.erp_productid NOT IN (
                        SELECT
                            epm.erp_productid
                        FROM
                            erp_product_to_mlb AS epm
                )
                AND ep.erp_quantity > 0
                AND ep.erp_status > 0
            LIMIT
                    10,10

所以我在我的应用程序中创建了这个:

$categoria = DB::table('erp_product')
                            ->join('erp_product_category','erp_product_category.erp_productid', '=', 'erp_product.erp_productid')
                            ->join('erp_mlbcategory_erpcategory', 'erp_mlbcategory_erpcategory.erp_categoryid', '=','erp_product_category.erp_categoryid')
                            ->join('erp_mlb_category', 'erp_mlb_category.erp_mcid', '=', 'erp_mlbcategory_erpcategory.erp_mlbcategoryid')
                            ->select('erp_mlb_category.erp_mlbid')
                            ->whereNotIn('erp_product.erp_productid', function($query){
                                $query->select('erp_productid')
                                       ->from('erp_product')
                                       ->where('erp_productid', '=', 'erp_product_category.erp_productid');
                            })
                            ->get();

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

这行代码错误:

->whereNotIn('erp_product.erp_productid', function($query){
  $query->select('erp_productid')
  ->from('erp_product')
  ->where('erp_productid', '=', 'erp_product_category.erp_productid');
})
  • 删除此行->where('erp_productid', '=', 'erp_product_category.erp_productid'),因为此处没有加入。
  • 你不能以同样的顺序说出->whereNotIn('erp_product.erp_productid'$query->select('erp_productid')->from('erp_product') whereNotIn 来检查 first_column 中的值不存在于< strong> second_column 不在同一 first_column

因此,请清除此行->where('erp_productid', '=', 'erp_product_category.erp_productid')并检查正确的名称以放入$query->select('right_column_name')->from('right_table_name')

答案 1 :(得分:0)

$ids= DB::table('erp_product')->pluck('erp_productid')

$categoria = DB::table('erp_product')
                            ->join('erp_product_category','erp_product_category.erp_productid', '=', 'erp_product.erp_productid')
                            ->join('erp_mlbcategory_erpcategory', 'erp_mlbcategory_erpcategory.erp_categoryid', '=','erp_product_category.erp_categoryid')
                            ->join('erp_mlb_category', 'erp_mlb_category.erp_mcid', '=', 'erp_mlbcategory_erpcategory.erp_mlbcategoryid')
                            ->select('erp_mlb_category.erp_mlbid')
                            ->whereNotIn('erp_product.erp_productid',$ids)
                            ->get();