2017-03-20 7 views
0

私は、次のように特定の距離よりも小さい距離を持つジョブをフィルタリングしようとしています。 JobLocationには多少の関連性があります。ここでの計算に基づくフィルタリングはっきりとしたLaravel

Job.php

class Job extends Model { 
    protected $table = 'jobs'; 
    protected $fillable = ['company_id', 'role_id', 'job_title']; 

    public function location() { 
     return $this->belongsToMany('App\Pincode', 'job_pincodes', 'job_id', 'location_id'); 
    } 
} 

Pincode.php

class Pincode extends Model { 
    protected $table = 'pincodes'; 
    protected $fillabe = ['location', 'pincode', 'state', 'district','lati','longi']; 

    public function jobs() { 
     return $this->belongsToMany('App\Job'); 
    } 
} 

問題は、私はwhereHas内の関係の各行にアクセスする方法がわからないということです。助けてください。

$user_lat = 28.7041; 
$user_long = 77.1025; 
$distance = 12; 
$result = Job::whereHas('location',function($query) 
use($user_lat,$user_long,$distance) { 
    // I don't know how to access $location 
    $query->whereRaw('3959 * acos(cos(radians(?)) * cos(radians(?)) * cos(radians(?) - radians(?)) + sin(radians(?)) * sin(radians(?))) <=?', array($location->lati, $user_lat, $location->longi, $user_long, $location->lati,$user_lat, $distance)); 
})->get(); 

答えて

0

だけwith()を使用して、query

$result = Job::with('location').whereHas('location',function(query) 
use($user_lat,$user_long,$distance) { 
    // I don't know how to access $location 
    $query->whereRaw('3959 * acos(cos(radians(?)) * cos(radians(?)) * cos(radians(?) - radians(?)) + sin(radians(?)) * sin(radians(?))) <=?', array($query->location->lati, $user_lat, $query->location->longi, $user_long, $query->location->lati,$user_lat, $distance)); 
})->get(); 
を通じて場所にアクセス
関連する問題