Laravel 如何添加动态';其中';用()关系雄辩地表达ORM

Laravel 如何添加动态';其中';用()关系雄辩地表达ORM,laravel,eloquent,Laravel,Eloquent,我正在尝试这样做: $verfuegbarkeiten = Verfuegbarkeit::verfuegbar()->with('product', 'producer', 'producer.user', 'producer.user.ort')->where('product.kategorie_id', '=', $_GET['kat'])->get()->toArray(); $kat = $_GET['kat']; $verfuegbarkeiten = V

我正在尝试这样做:

$verfuegbarkeiten = Verfuegbarkeit::verfuegbar()->with('product', 'producer', 'producer.user', 'producer.user.ort')->where('product.kategorie_id', '=', $_GET['kat'])->get()->toArray();
$kat = $_GET['kat'];
$verfuegbarkeiten = Verfuegbarkeit::verfuegbar()
    ->with('product', 'producer', 'producer.user', 'producer.user.ort')
    ->whereHas('product', function($query) use ($kat) {
        $query->where('kat', $kat);
    })
    ->get()
    ->toArray();
我想使用一个'where'子句,这样我只能在'product's attribute'kategorie_id'与get参数匹配的地方获得结果。我怎样才能在关系上“在哪里”?这个值可以是动态的,这对我来说非常重要,因此在相关模型中编写一个fix函数不是一个好的解决方案

您想要的每一个提示
whereHas()
,文档如下:

就你的例子来说,这意味着类似这样的事情:

$verfuegbarkeiten = Verfuegbarkeit::verfuegbar()->with('product', 'producer', 'producer.user', 'producer.user.ort')->where('product.kategorie_id', '=', $_GET['kat'])->get()->toArray();
$kat = $_GET['kat'];
$verfuegbarkeiten = Verfuegbarkeit::verfuegbar()
    ->with('product', 'producer', 'producer.user', 'producer.user.ort')
    ->whereHas('product', function($query) use ($kat) {
        $query->where('kat', $kat);
    })
    ->get()
    ->toArray();

尽管我可能会补充说,在Laravel中通常不鼓励使用
$\u GET

不幸的是,这不起作用,因为
whereHas
约束只适用于特定的关系集合,而不适用于主表,所以它不会过滤掉数据。很抱歉@Filipkoblanski,我不太明白你的意思。这将得到所有Verfuegbarkeit对象,这些对象都具有产品匹配?kat=,这似乎正是他想要的。