Laravel 查询生成器在特定条件下从其他 table 获取数据

Laravel Query Builder get data from other table under certain condition

你好,我正在尝试从另一个 table 获取特定产品。 这是我的产品table:

我还有一个 table 叫 banned_products:

我很难使用 Laravel 查询生成器获取正确的数据。 这是我目前所拥有的:

    $banned_products = DB::table('banned_products')
        ->select('product_id')
        ->where('reason', '=', 'unknown')
        ->groupBy('product_id');


    return DB::table('products')
        ->leftJoinSub($banned_products, 'banned_products', function ($join) {
            $join->on('products.id', '=', 'banned_products.product_id');
        })
        ->select(
            'products.id as product_id',
            'products.identifier')
        ->whereNull('products.deleted_at')->get();

此查询returns我所有的产品,但不是我想要的原因不明的已删除产品。

怎么做?

感谢您的阅读。

你试试看下面的方法是否有效?

DB::table('products')
->rightJoin('banned_products', 'banned_products.product_id', 'products.id')
->where(function ($query) {
    $query->where('banned_products.reason', 'unknown')
    ->orWhereNull('banned_products.id');
})
->get(['products.id as product_id', 'products.identifier']);

/*
SQL Query:

select
   "products"."id" as "product_id",
   "products"."identifier"
from "products"
right join "banned_products" on "banned_products"."product_id" = "products"."id"
where (
   "banned_products"."reason" = "unknown"
   or "banned_products"."id" is null
)

*/