我想要做的事情很簡單: - 當根據用戶緯度和經度(在DB上)計算的距離高於int時,我們通過添加刪除結果當前用戶那裏 - 當這種距離不高,我們的自定義值添加到返回的結果使用Laravel QueryBuilder「when」並將自定義值添加到查詢結果
這可以很容易地使用foreach後執行查詢完成:
foreach($search as $key => $value){
if(distance($value->latitude,$value->longitude,$user->latitude,$user->longitude,"K") > $distance) {
unset($search[$key]);
} else {
$search[$key]->distance = $calculatedDistance
}
}
這種方式的缺點是,如果我們有一個大型的數據庫,它會消耗大量的內存ory和時間,因爲我們應該直接在查詢中做兩次。
我需要做的是使這個查詢本身執行它。我不知道該怎麼做的是: - 在執行查詢時直接向查詢添加一個自定義值,並在查詢中的某個時間內執行距離計算,而不使用foreach,而是直接獲取當前原始值與...比較。
我現在正在做什麼:
->when($distance > 0, function ($query) use($distance, $longitude, $latitude){
$query->where(function ($subQuery) use ($longitude, $latitude,$distance) {
$cDistance = distance((int)$subQuery->value('latitude'),
(int)$subQuery->value('longitude'),
$latitude,
$longitude,
"K");
$subQuery->when(($cDistance > $distance),
function ($subQuery){
$subQuery->where('users.id', '<>', (int)$subQuery->value('id'));
},function ($subQuery) use ($cDistance) {
$subQuery->value((string)$cDistance.' as distance');
}
);
});
$subQuery->value('something')
僅與查詢的前原測試,而不是做這行的所有行。 $subQuery->value((string)$cDistance.' as distance');
返回錯誤
SQLSTATE [42S22]:柱未找到:1054未知列 '84 0.354917445764' 在 '字段列表'(SQL:選擇
84
354917445764
作爲distance
從users
極限1)
** - > value($ column_name)**只是帶上** $ column_name **的值。粘貼方法內容試試幫你 – MohamedSabil83
哪個方法的內容?我需要的是簡單地向查詢結果添加一個值,例如$ user = [username => myname]我需要添加5的年齡,以便結果變爲$ user = [username => myname,age = 5] –
我知道。通過該方法開始' - > when()'功能 – MohamedSabil83