【发布时间】:2019-12-09 14:31:48
【问题描述】:
这是我要转换为 Laravel eloquent ORM 的 SQL 查询。
SELECT v.product_id
FROM (
SELECT product_id, count(*) AS matches
FROM product where filter_id IN (2,4)
GROUP BY product_id
) AS v
WHERE v.matches = 2
这是我尝试过的代码。它返回包含 2 或 4 的所有 filter_id。我想获得具有 filter_id 2 和 4 的 product_id。
$filter = [2, 4];
$products =
OcProductFilter::with('product')
->whereHas('product', function ($query) use ($filter) {
$query->whereIn('oc_product_filter.filter_id', array($filter));
})->get();
这是OcProductFilter的型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class OcProductFilter extends Model
{
public $timestamps = false;
protected $primaryKey = 'product_id';
protected $table = 'oc_product_filter';
protected $fillable = ["filter_id", 'product_id'];
protected $hidden = [];
public function product()
{
return $this->belongsTo('App\OcProduct', 'product_id', 'product_id');
}
}
这是 product_filter 表 table image
【问题讨论】: