我想在某些條件下洗掉 where 子句:
$q = Thread::with('comments')->take(10);
if(strlen($input) < 4){
$result = $q->where('title', '~', "^$input$")->get();
if($result->isNotEmpty()){
return $result;
}
// if was empty:
}
// How to clean the where clause from the above here? because it affect the query below:
$result = $q->where('title', 'like', "%$input%")->get();
問題是如果資料為空,第一個 where 子句會影響第二個 where 子句,如何在需要時洗掉現有的 where 子句?newQuery()在我的情況下也不起作用。
請注意,我在 postgres~和 'like' 中使用了兩個單獨的陳述句
類似于reorder()的 where 子句
uj5u.com熱心網友回復:
使用條件從句
$threads = Thread::with('comments')->when(strlen($input) < 4, function ($query) use ($input) {
return $query->where('title', '~', "^$input$");
}, function ($query) use ($input) {
return $query->where('title', 'like', "%$input%");
})->take(10)->get();
https://laravel.com/docs/8.x/queries#conditional-clauses
如果您想對其進行第二次更改,我會像這樣撰寫該邏輯。僅在需要時才加載注釋。
if (strlen($input) < 4) {
$threads = Thread::where('title', '~', "^$input$")->take(10)->get();
if ($threads->isNotEmpty()) {
return $threads->load('comments');
}
}
return Thread::with('comments')->where('title', 'like', "%$input%")->take(10)->get();
uj5u.com熱心網友回復:
是的,有辦法做到
$q = Thread::with('comments')->take(10);
if(strlen($input) < 4){
$result = $q->where('title', '~', "^$input$")->get();
if($result->isNotEmpty()){
return $results;
}
}
// getQuery()是一個查詢構建器方法,它包含您正在訪問或嘗試構建的查詢的所有分組、選擇、訂單、位置、連接等。
$q->getQuery()->wheres= [];
$result = $q->where('title', 'like', "%$input%")->get();
uj5u.com熱心網友回復:
如果您在添加 where 之前克隆它的作業方式與洗掉 where 相同
...
if(strlen($input) < 4){
$result = (clone $q)->where('title', '~', "^$input$")->get();
if($result->isNotEmpty()){
return $results;
}
}
$result = $q->where('title', 'like', "%$input%")->get();
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/331016.html
標籤:拉拉维尔 PostgreSQL
上一篇:未找到基表或視圖:1146表“cricbangla.batter_firsts”不存在(SQL:從“batter_firsts”中選擇count(*)作為聚合)-Laravel-8
