2017-01-04 411 views
0

我試圖找到我的問題的解決方案,但找不到任何有用的東西。我需要獲取由此查詢創建的「距離」變量以及所有其他數據(用戶,用戶數據,優惠等)。我需要在我的視圖中以「km」爲單位打印每條記錄的距離。雄辯:需要返回從這個查詢(座標)「距離」

下面的代碼:

if(property_exists($params, "lat") && property_exists($params, "lng")) { 
    if(null == $params->lat || null == $params->lng) { 
     //don't use coordinates 
    } else { 
     $radius = $this->coordMaxRadius; 
     $query->whereHas("userData", function($q) use ($params, $radius) { 
      $q->selectRaw(\DB::raw(" 
      ROUND(6371 * acos(cos(radians($params->lat)) 
       * cos(radians(lat)) 
       * cos(radians(lng) - radians($params->lng)) 
       + sin(radians($params->lat)) 
       * sin(radians(lat)))) AS distance ")); 
      $q->having("distance", "<", $radius)->orderBy("distance"); 
     }); 
    } 
} 
/***** later in the code *****/ 
$query->with("timeSlots.days", "timeSlots.time", "userData", 
      "university", "faculty", "user", 'userData.feedbacks'); 
+0

這樣你可以對其進行篩選後,在'foreach'循環中做類似的工作,它將計算**距離**並將其添加爲您需要它的屬性$ query-> userData-> distance = $ resultOfCalculation'。 – Mihailo

+0

@Mihailo我想我會用這個作爲臨時解決方案,直到我找不到一個純粹的關係解決方案 –

+0

你的代碼,查詢沒有返回'distance'屬性?而不是'$ query-> with('try'$ query-> get()'並查看距離變量是否存在 –

回答

0

我還處理了同樣的問題幾個星期before.I有解決辦法,但我硝基甲苯知道到底正確與否

$query->whereHas("userData", function($q) use ($params, $radius) { 
$distance="ROUND(6371 * acos(cos(radians($params->lat)) 
      * cos(radians(lat)) 
      * cos(radians(lng) - radians($params->lng)) 
      + sin(radians($params->lat)) 
      * sin(radians(lat))))";   
$q->selectRaw(\DB::raw($distance ." AS distance ")); 
     $q->having($distance, "<", $radius)->orderBy("distance"); 
    }); 
+0

然而沒有,因爲 - > selectRaw對我來說是不確定的,無論如何它不起作用 –