簡體   English   中英

在Laravel中Where子句為變量

[英]Where clause as variable in Laravel

我試圖在Laravel 4中創建一個更高級的查詢,該查詢由AND和OR where子句組成,格式如下:

(('a','=','1') OR ('b','=','s') OR ('c','=','3')) AND (('d','=','1') OR ('e','=','s') OR ('f','=','3'))

問題是我正在根據用戶通過某些表單應用的某些過濾器動態生成這些查詢。 這意味着查詢可以具有以下格式:

a AND b

以及這種格式:

(a OR b OR c) AND (d OR e OR f)

以及這個:

(a OR b) AND c AND (d OR e) AND f

我正在將where子句生成為字符串,但是我無法設法將此變量添加到方法調用中。

例:

$whereclause = where(function($query){$query->where('colorgrade','like','41-2');})->where(function($query){$query->where('datetime','>','2014-11-05');})

$result = $gin->bales()->$whereclause->take(1000)->get();

我收到的錯誤如下:

未定義的屬性:Illuminate \\ Database \\ Eloquent \\ Relations \\ HasMany :: $ where(function($ query){$ query-> where('colorgrade','like','41-2');})-> where(函數($查詢){$查詢 - >其中( '日期時間', '>', '2014年11月5日');})

如何將生成的where子句(字符串變量)傳遞給上述鏈接函數?

快速創建查詢是利用口才查詢范圍的一個好主意。 這為您提供了一種基於表單選項構建不同查詢的方法。

http://laravel.com/docs/4.2/eloquent#query-scopes

您也許可以這樣做,但是我直覺這不適用於變量中的閉包和鏈接方法。 參見http://php.net/manual/en/functions.variable-functions.php

$result = $gin->bales()->$whereclause()->take(1000)->get();

另外,您可以拆分查詢,以使查詢不會全部在一行內完成。

// Get the initial Query Builder instance
$query = $gin->bales();

$query->where(function($query) {
    $query->where('colorgrade', 'like', '41-2');
});

if ($something === 'something') {
    $query->where('something', $something);
} else {
    $query->where('something', 'something_else');
}

// Finally get our results
$results = $query->take(1000)->get();

暫無
暫無

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

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