第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Laravel:將子集合過(guò)濾回自身

Laravel:將子集合過(guò)濾回自身

PHP
Smart貓小萌 2023-09-08 14:21:36
我正在編寫(xiě)一個(gè)搜索函數(shù),它使用三個(gè)參數(shù):品牌、型號(hào)和燃料類型?!癿ake”參數(shù)是必需的,因此我首先使用下面的代碼將 make 及其相關(guān)模型選擇到集合中。// Find Make and Models$makeAndModels = Make::where('name', $request->make)->with('carmodels', 'carmodels.fueltype')->first();此時(shí)集合看起來(lái)像這樣:{    "id": 2,    "name": "Toyota",    "created_at": "2020-07-26T16:11:06.000000Z",    "updated_at": "2020-07-26T16:11:06.000000Z",    "carmodels": [        {            "id": 3,            "name": "Prius",            "make_id": 2,            "fueltype_id": 2,            "created_at": "2020-07-26T16:44:21.000000Z",            "updated_at": "2020-07-26T16:44:21.000000Z",            "fueltype": {                "id": 2,                "name": "Hybrid",                "created_at": "2020-07-26T16:11:06.000000Z",                "updated_at": "2020-07-26T16:11:06.000000Z"            }        },        {            "id": 4,            "name": "Hilux",            "make_id": 2,            "fueltype_id": 3,            "created_at": "2020-07-26T16:44:21.000000Z",            "updated_at": "2020-07-26T16:44:21.000000Z",            "fueltype": {                "id": 3,                "name": "Diesel",                "created_at": "2020-07-26T16:11:06.000000Z",                "updated_at": "2020-07-26T16:11:06.000000Z"            }        }    ]}然后,我想按名稱和燃料類型過(guò)濾“汽車模型”子集合,將過(guò)濾后的數(shù)據(jù)返回到其原始集合,而不是返回到新集合。這些過(guò)濾器僅應(yīng)在提供了附加參數(shù)的情況下運(yùn)行,我當(dāng)前使用的代碼如下所示。        //Filter Models By Additional Parameters            //Model            if ($request->model) {                $model = $request->model;                $makeAndModels->carmodels = $makeAndModels->carmodels->filter()->where('name', $model);            }由于某種原因,這種過(guò)濾方式不會(huì)覆蓋原始集合,例如,如果我過(guò)濾到新的子集合,        //Filter Models By Additional Paramters            //Model            if ($request->model) {                $model = $request->model;                $makeAndModels->carmodelsFiltered = $makeAndModels->carmodels->filter()->where('name', $model);            }它產(chǎn)生以下結(jié)果,所以我知道過(guò)濾器應(yīng)該起作用。
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以with()使用數(shù)組作為第一個(gè)參數(shù)的調(diào)用來(lái)過(guò)濾它們。如果您傳遞包含的鍵和closures查詢的鍵,則可以在其中查詢關(guān)系。這些closures在您的情況下非常通用,我在數(shù)組之前定義了 it,因?yàn)檫@兩種情況都是相同的。


這與您現(xiàn)在查詢數(shù)據(jù)庫(kù)不同,但這具有更好的性能,因?yàn)槟槐厝〕鏊袛?shù)據(jù)。


$model = $request->model;


$nameFilter = function ($query) use ($model) {

    $query->when($model, function ($query) use ($model) {

        $query->where('name', $model);

    });

};


$makeAndModels = Make::when($model, function ($query) use ($model) {

    $query->where('name', $model);

})->with(

    [

        'carmodels' => $nameFilter,

        'carmodels.fueltype' => $nameFilter,

    ]

)->first();

更新


僅當(dāng)名稱存在時(shí)才過(guò)濾數(shù)據(jù)庫(kù),Laravel有when()調(diào)用,僅在滿足布爾條件時(shí)才執(zhí)行查詢。


查看完整回答
反對(duì) 回復(fù) 2023-09-08
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)