簡體   English   中英

如何從具有多個數組條件的laravel中的表中檢索數據

[英]How can I retrieve data from a table in laravel with multiple array conditions

我在電子商務網站中應用搜索過濾器。 在這里,客戶可以選擇各種領域,如顏色,形狀,價格,對稱性,拋光,清晰度和各種其他東西。 當客戶選擇任何選項時,它應該添加到他選擇的最后一個選項中。因此,他/她可能具有必須被提取和顯示的條件的組合。 對於一個數組條件,我可以在laravel中使用whereIn但是對於多個數組條件我應該使用什么。我不確定哪個數組將為空。

這是我的過濾代碼: -

public function Filter(Request $request)
{
    $conditions = array();
    if($request->isMethod('post')) {
        $data = array_filter($request->all());

        $shapes = array();
        $amount = array();
        $carat  = array();
        $cut  = array();
        $color = array();
        $clarity = array();
        $cerifying_agency = array();
        $flourscence = array();
        $polish = array();
        $symmetry = array();
       // $conditions=array();
        if(isset($data['shape'])){
            $shapes = $data['shape'];
        }
        if(isset($data['amount'])){
            $amount = $data['amount'];
        }
        if(isset($data['carat'])){
            $carat = $data['carat'];
        }
        if(isset($data['cut'])){
            $cut = $data['cut'];
        }
        if(isset($data['color'])){
            $color = $data['color'];
        }
        if(isset($data['clarity'])){
            $clarity = $data['clarity'];
        }
        if(isset($data['ca'])){
            $cerifying_agency = $data['ca'];
        }
        if(isset($data['fl'])){
            $flourscence = $data['fl'];
        }
        if(isset($data['polish'])){
            $polish = $data['polish'];
        }
        if(isset($data['symmetry'])){
            $symmetry = $data['symmetry'];
        }

    }
}

我已經附加了UI的快照和ajax的數據格式,它正在過濾函數的數組中被調用: - 抱歉我無法嵌入圖片,因為Stackoverflow不允許我這樣做

好吧,你可以像常規whereIn一樣使用這些條件。

例如:

$posts = Post::latest();

if($request->has('carat')) 
{
    $posts->whereIn('carat', $request->input('carat');
}

if($request->has('shape')) 
{
    $posts->whereIn('shape', $request->input('shape'));
}

....

$posts = $posts->get();

請務必先驗證您的情況。

您可以使用與此類似的功能:

function appendFilter($query, $array, $fieldName){
    return $query->where(function($query) use ($array, $fieldName) {
        $query->whereIn($fieldName, $array)->orWhereRaw(empty($array) ? "true" : "false");
    });
}

你可以像這樣使用它:

$productQuery = DB::table("products");
$productQuery = appendFilter($productQuery, $shapes, "shape");
$productQuery = appendFilter($productQuery, $otherFilters, "otherField");
$results = $productQuery->get();

這個函數做的是它附加嵌套在哪里與第一部分做WhereIn ,但它也有orWhereRaw,如果數組為空,則附加原始“true”值 (否則 false)因此,如果你的數組帶有過濾值為空,它將不會影響您選擇的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM