簡體   English   中英

使用Yii2查詢從具有功能的MySQL選擇返回值

[英]Return a value from a MySQL select with function using a Yii2 Query

我有一個Yii2 searchQuery設置,可以很好地用於計算不在給定點所需半徑內的那些記錄。

public function search($params)
{
 $query = TrainerExtend::find();
 $dataProvider = new ActiveDataProvider([
     'query'      => $query,
     'pagination' => [
     'pageSize' => $this->pageSize,
     ],
 ]);
 $this->load($params);
 $query->having([
     '<',
     'ST_Distance_Sphere(POINT(' . $this->longitude . ',' . $this->latitude . '),
      PointFromText(CONCAT(\'POINT(\',longitude,\'\',latitude,\')\')))',
      $this->radius * 1000
 ]);
}
  $rows = $query->distinct();

    return $dataProvider;
}

public function actionFind()
{
    $searchModel = new TrainerSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    $trainers = $dataProvider->getModels();

    if (array_key_exists('trainerSearch',Yii::$app->request->queryParams)
        && !empty($trainerSearch = Yii::$app->request->queryParams['TrainerSearch']))
    {
        if (array_key_exists('specialties',$trainerSearch) && !empty($specialities = $trainerSearch['specialties']))
        {
            foreach ($trainers as $trainer) {
                $specialties = $trainer->trainerSpecialtiesArray;
                $trainer->match = $this->caluclateRelevance($specialties);
            }
        }
    }
    return $this->render('find', [
        'searchModel'  => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

結果查詢

   SELECT DISTINCT * FROM `trainer` WHERE `gender`='0' HAVING ST_Distance_Sphere(POINT(-123.3836214,48.418248899999995), PointFromText(CONCAT('POINT(',longitude,' ',latitude,')'))) < 59000 LIMIT 2`

生成的記錄用於半徑計算,但是我也需要由geo函數計算的距離。 我嘗試使用as關鍵字,但是它一直在中斷查詢。

對於計算列,您必須在查詢中添加適當的選擇代碼

$query->->addSelect(["*",
         "ST_Distance_Sphere(POINT($this->longitude ,
          $this->latitude ), 
          PointFromText(CONCAT('POINT(',longitude,' ',latitude,')')))as distance"]);

然后顯示結果

首先,您應該在模型中添加一個公共變量,例如:

  class TrainerExtend extends \yii\db\ActiveRecord
  {

      public $distance;  // codice  di stato del codice fiscale 
      ......

      public static function tableName()
      {
      ....

其次,您可以在視圖中使用距離作為模型屬性,例如:gridview

  <?= GridView::widget([
    'dataProvider' => $dataProvider,
     ......
    'columns' => [
        .....
        'distance', 
        ...

暫無
暫無

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

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