如何对模型上我自己的方法的结果执行 Eloquent 查询?
How do I perform Eloquent queries on results from my own method on a Model?
我有 2 个模型,一个用于 Listing,一个用于 State。 Listing 上的关系是:
return $this->belongsTo('App\State');
我在 Listing 模型上有自己的方法,可以根据距离 return 项目:
public static function getClosest($lat, $lng, $distance)
{
$results = Listing::select('id', 'name', 'address', 'suburb',
'postcode', 'phone', 'url')
->selectRaw('( 6371 * acos( cos( radians(?) ) *
cos( radians( ST_X(position) ) )
* cos( radians( ST_Y(position) ) - radians(?)
) + sin( radians(?) ) *
sin( radians( ST_X(position) ) ) )
) AS distance', [$lat, $lng, $lat])
->havingRaw("distance < ?", [$distance])
->orderBy('distance', 'asc')
->get();
return collect($results);
}
在我的 ListingController 中,我想 return 每个项目的状态名称 return 我的结果。
如果我得到的结果是:
$listings = Listing::all();
有效,但如果我使用自定义方法则无效:
$listings = Listing::getClosest($request['lat'], $request['lng'],1000);
我尝试获取状态的方式是:
foreach ($listings as $item) {
return $item->state->short_name;
为什么它适用于 I get all 而不是当我使用自定义方法获得结果时?
因为你输了foreign_keystate_id。你的 selectRaw
覆盖了你的 select
.
记住你需要 select 你的 foreign_key(state_id)
,这样 laravel 才能找到它的关系。
尝试这样做:
public static function getClosest($lat, $lng, $distance)
{
return Listing::select(\DB::raw('( 6371 * acos( cos( radians(?) ) *
cos( radians( ST_X(position) ) )
* cos( radians( ST_Y(position) ) - radians(?)
) + sin( radians(?) ) *
sin( radians( ST_X(position) ) ) )
) AS distance', [$lat, $lng, $lat]),
'id', 'name', 'address', 'suburb', 'postcode', 'phone', 'url','name', 'state_id')
->havingRaw("distance < ?", [$distance])
->orderBy('distance', 'asc')
->get();
}
我有 2 个模型,一个用于 Listing,一个用于 State。 Listing 上的关系是:
return $this->belongsTo('App\State');
我在 Listing 模型上有自己的方法,可以根据距离 return 项目:
public static function getClosest($lat, $lng, $distance)
{
$results = Listing::select('id', 'name', 'address', 'suburb',
'postcode', 'phone', 'url')
->selectRaw('( 6371 * acos( cos( radians(?) ) *
cos( radians( ST_X(position) ) )
* cos( radians( ST_Y(position) ) - radians(?)
) + sin( radians(?) ) *
sin( radians( ST_X(position) ) ) )
) AS distance', [$lat, $lng, $lat])
->havingRaw("distance < ?", [$distance])
->orderBy('distance', 'asc')
->get();
return collect($results);
}
在我的 ListingController 中,我想 return 每个项目的状态名称 return 我的结果。
如果我得到的结果是:
$listings = Listing::all();
有效,但如果我使用自定义方法则无效:
$listings = Listing::getClosest($request['lat'], $request['lng'],1000);
我尝试获取状态的方式是:
foreach ($listings as $item) {
return $item->state->short_name;
为什么它适用于 I get all 而不是当我使用自定义方法获得结果时?
因为你输了foreign_keystate_id。你的 selectRaw
覆盖了你的 select
.
记住你需要 select 你的 foreign_key(state_id)
,这样 laravel 才能找到它的关系。
尝试这样做:
public static function getClosest($lat, $lng, $distance)
{
return Listing::select(\DB::raw('( 6371 * acos( cos( radians(?) ) *
cos( radians( ST_X(position) ) )
* cos( radians( ST_Y(position) ) - radians(?)
) + sin( radians(?) ) *
sin( radians( ST_X(position) ) ) )
) AS distance', [$lat, $lng, $lat]),
'id', 'name', 'address', 'suburb', 'postcode', 'phone', 'url','name', 'state_id')
->havingRaw("distance < ?", [$distance])
->orderBy('distance', 'asc')
->get();
}