Intereting Posts
Невозможно перенаправить с большим количеством переменных. Заголовок может содержать не более одного заголовка, обнаружена новая строка. в PHP __call vs method_exists Что означает $ {} в синтаксисе PHP? Установка PDO_MYSQL на PHP 5.1.6 с использованием ОС PECL: UBUNTU Чтение в Malformed XML (некодированные объекты XML) с помощью PHP Динамическая таблица HTML в PHP Mail PHP preg_replace: Нечувствительность к регистру с чувствительностью к регистру Охват кода при отсутствии проверки защищенных / приватных методов с помощью PHPUnit Создайте учетную запись электронной почты с PhP. С некоторыми вещами мне нужно работать Бенчмаркинг Производительность node.js (кластера) с пулами mysql: Lighttpd + PHP? Получить подробную информацию (родительский платеж) о возмещении Поверните PNG, затем сохраните с помощью прозрачности изображения Как изменить папку Pear / PECL по умолчанию из / var / tmp? Как использовать две разные версии PHP на одном сервере Implode многомерный массив с разными разделителями в php

Обработка Mysql Пространственные типы данных в Laravel Eloquent ORM

Как обрабатывать пространственные типы данных mysql в красноречивой ORM ?, Это включает в себя способ создания миграции, вставки пространственных данных и выполнения пространственных запросов. Если фактических решений не существует, есть ли какие-либо обходные пути?

Обходной путь, который я недавно применил, состоит в том, чтобы иметь поля широты и долготы на модели со следующими валидациями (см. Класс Validator ):

$rules = array('latitude' => 'required|numeric|between:-90,90', 'longitude'=>'required|numeric|between:-180,180',) 

Магия приходит на метод загрузки модели, который устанавливает правильное значение поля пространственной точки:

 /** * Boot method * @return void */ public static function boot(){ parent::boot(); static::creating(function($eloquentModel){ if(isset($eloquentModel->latitude, $eloquentModel->longitude)){ $point = $eloquentModel->geoToPoint($eloquentModel->latitude, $eloquentModel->longitude); $eloquentModel->setAttribute('location', DB::raw("GeomFromText('POINT(" . $point . ")')") ); } }); static::updated(function($eloquentModel){ if(isset($eloquentModel->latitude, $eloquentModel->longitude)){ $point = $eloquentModel->geoToPoint($eloquentModel->latitude, $eloquentModel->longitude); DB::statement("UPDATE " . $eloquentModel->getTable() . " SET location = GeomFromText('POINT(" . $point . ")') WHERE id = ". $eloquentModel->id); } }); } 

О миграции, например @jhmilan, вы всегда можете использовать методы инструкции Schema :: create и DB :: для настройки миграции.

 Schema::create('locations', function($table){ $table->engine = "MYISAM"; $table->increments('id')->unsigned(); $table->decimal('latitude', 10, 8); $table->decimal('longitude', 11, 8); $table->timestamps(); }); /*Espatial Column*/ DB::statement('ALTER TABLE locations ADD location POINT NOT NULL' ); /*Espatial index (MYISAM only)*/ DB::statement( 'ALTER TABLE locations ADD SPATIAL INDEX index_point(location)' ); 

Он доступен для использования https://github.com/grimzy/laravel-mysql-spatial

вы можете использовать:

 namespace App; use Illuminate\Database\Eloquent\Model; use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait; /** * @property \Grimzy\LaravelMysqlSpatial\Types\Point $location */ class Place extends Model { use SpatialTrait; protected $fillable = [ 'name', ]; protected $spatialFields = [ 'location', ]; } 

то вы можете запускать запросы в поле «location».

для хранения модели вы можете использовать:

 $place1 = new Place(); $place1->name = 'Empire State Building'; $place1->location = new Point(40.7484404, -73.9878441); $place1->save(); 

для получения модели, которую вы должны использовать:

 $place2 = Place::first(); $lat = $place2->location->getLat(); // 40.7484404 $lng = $place2->location->getLng(); // -73.9878441