私は手動で正しい結果を得るためにSQL呼び出しをしなければならなかったが、私はCraft
3でこれを達成するための巧妙な方法があることを望んでいた。
$query = ( new Query() )
->select('craft_content.title, craft_entries.id, ( 3959 * acos( cos( radians(' . $latitude . ') ) * cos( radians( field_clubLatitude ) ) *
cos( radians( field_clubLongitude ) - radians(' . $longitude . ') ) + sin( radians(' . $latitude . ') ) *
sin( radians( field_clubLatitude ) ) ) ) AS distance')
->from( 'craft_elements' )
->where('field_clubLongitude != "" and field_clubLatitude != ""')
->join( 'LEFT JOIN', 'craft_entries', 'craft_elements.id = craft_entries.id' )
->join( 'LEFT JOIN', 'craft_content', 'craft_elements.id = craft_content.elementId' )
->andHaving('distance < 100')
->orderBy('distance')
->limit(3);
ベストアンサー
生成される要素クエリにアクセスする「適切な」方法は、https://github.com/ethercreative/simplemap/blob/v3/src/services/MapService.php