亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 查詢生成器中的條件 WHERE 語句不適用于 LIMIT

Laravel 查詢生成器中的條件 WHERE 語句不適用于 LIMIT

PHP
收到一只叮咚 2022-07-09 09:39:29
對于我的數據庫table,雖然下面的代碼工作正常:$sql = DB::table('table')->select('id')->orderBy('id', 'asc')->limit(50)->get();有 50 行,這不會:$sql = DB::table('table')->select('id');$sql->orderBy('id', 'asc')->limit('50')->get();因為它確實返回了正確的行,但它返回了數據庫本身中的所有行。我需要能夠將它分開,因為我打算在兩者之間使用 if 語句來WHERE根據用戶輸入添加子句,如下所示(編輯:添加的代碼類似于實際代碼):$foo = $request->input('foo');$bar = $request->input('bar');$sqls = DB::table('foobar')->select('id', 'name', 'age', 'zip_code');if($foo === "foo") $sqls->where('age', '<', 31);if($bar === "bor") $sqls->where('zip_code', '>', '12345');$sqls->orderBy('age', 'asc')->limit(50)->get();$return = '';$sqls->each(function($sql) use (&$return){     $return .= "<td> {$sql->id} </td>"}返回所有行而不是限制為 50 行。
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

目前,您調用each的是查詢構建器實例,而不是查詢的結果(這將是一個集合)。each()在查詢生成器上用于分塊結果,這將忽略您之前設置的任何限制。


首先,要獲取您正在工作的代碼,您可以將結果分配給一個變量,然后調用each()它。


$results = $sqls->orderBy('age', 'asc')->limit(50)->get();


$results->each(...); 

但是,我實際上建議您使用map()和join()而不是each():


$results = $sqls->orderBy('id', 'asc')->limit(10)->get();


$return = $results->map(function ($item) {

    return  "<td> {$item->id} </td>";

})->join('');

僅供參考,Laravel 也有一個when()方法來省去你編寫多個 if 語句的麻煩,所以你的整個查詢看起來像:


$results = DB::table('foobar')

    ->select('id', 'name', 'age', 'zip_code')

    ->when($request->input('foo') === 'foo', function ($query) {

        $query->where('age', '<', 31);

    })

    ->when($request->input('bar') === 'bar', function ($query) {

        $query->where('zip_code', '>', '12345');

    })

    ->orderBy('age', 'asc')

    ->limit(50)

    ->get();


$return = $results->map(function ($item) {

    return  "<td> {$item->id} </td>";

})->join('');


查看完整回答
反對 回復 2022-07-09
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

我想這會對你有所幫助


if($request->input('var')) {

   $var = $request->var;

   $cond1 = DB::table('table')->select('...')->where('foo','>',$var)- 

             >orderBy()->limit()->get();

 // more if 

}


查看完整回答
反對 回復 2022-07-09
  • 2 回答
  • 0 關注
  • 248 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號