![](/img/trans.png)
[英]How to save array data from multiple select in Laravel using Eloquent
[英]How to return an array using Laravel Eloquent select?
我有這堂課
<?php
namespace App\Models\Tables;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
class ZipCode extends Model
{
protected $table = 'zip';
public $timestamps = false;
protected $fillable = [
'latitude',
'longitude',
];
public static function radiusSearch($lat, $lng)
{
$circle_radius = 3959;
$subQuery = '(SELECT *, (' . $circle_radius . ' * acos(cos(radians(' . $lat . ')) * cos(radians(latitude)) * cos(radians(longitude) - radians(' . $lng . ')) + sin(radians(' . $lat . ')) * sin(radians(latitude)))) AS distance FROM zip) AS distances';
$result = ZipCode::select('*')
->from(ZipCode::raw($subQuery))
->limit(20);
var_dump($result);
return $result;
}
}
當我調用radiusSearch(...)
我得到一個Illuminate\\Database\\Eloquent\\Builder
對象而不是實際結果
$result->get()
不起作用,我得到Object of class Illuminate\\Database\\Eloquent\\Builder could not be converted to string
這個通用查詢工作得很好ZipCode::where('zip', '11111')->get()
只是不是上面的那個
有什么想法嗎?
編輯: $result
返回如下內容:
object(Illuminate\Database\Eloquent\Builder)[170]
protected 'query' =>
object(Illuminate\Database\Query\Builder)[164]
public 'connection' =>
object(Illuminate\Database\MySqlConnection)[166]
protected 'pdo' =>
object(PDO)[175]
...
protected 'model' =>
object(App\Models\Tables\ZipCode)[171]
protected 'table' => string 'zip' (length=9)
public 'timestamps' => boolean false
...
如果我執行$result->getModel()->get()->toArray()
這將返回表中的所有結果
正如你已經看到的代碼
$result = ZipCode::select('*')
->from(ZipCode::raw($subQuery))
->limit(20);
將返回一個代表您查詢的 Builder 對象。 您需要調用 ->get() 讓構建器實際執行您的查詢並返回結果
$result = ZipCode::select('*')
->from(ZipCode::raw($subQuery))
->limit(20)->get();
這是我根據其他一些社區答案提出的解決方案
public static function getClosestCities($lat, $lng, $city, $distance = 20, $limit = 20)
{
$coordinates = ['latitude' => $lat, 'longitude' => $lng];
$cares = self::scopeIsWithinMaxDistance(ZipCode::raw('select *'), $coordinates, $distance, $city)->limit($limit)->get();
return $cares ? $cares->toArray() : null;
}
public static function scopeIsWithinMaxDistance($query, $coordinates, $radius = 5, $city)
{
$haversine = "(3961 * acos(cos(radians(" . $coordinates['latitude'] . "))
* cos(radians(`latitude`))
* cos(radians(`longitude`)
- radians(" . $coordinates['longitude'] . "))
+ sin(radians(" . $coordinates['latitude'] . "))
* sin(radians(`latitude`))))";
return $query->select('*')
->selectRaw("{$haversine} AS distance")
->orderByRaw("{$haversine} asc")
->whereRaw("{$haversine} < ?", [$radius])
->groupBy("city");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.