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
)
*/
你好,我正在尝试从另一个 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
)
*/