Как обрабатывать пространственные типы данных mysql в красноречивой ORM ?, Это включает в себя создание миграции, вставку пространственных данных и выполнение пространственных запросов. Если фактических решений не существует, есть ли какие-либо обходные пути?Обработка Mysql Пространственные типы данных в Laravel Eloquent ORM
16
A
ответ
9
Обходной я реализовал некоторое время назад, чтобы иметь широту и долготу поля на модели со следующими валидаций (см Validator class):
$rules = array('latitude' => 'required|numeric|between:-90,90',
'longitude'=>'required|numeric|between:-180,180',)
Магия приходит на boot method модели, которая устанавливает правильное значение точки поля пространственного:
/**
* 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 говорит, что вы всегда можете использовать схемы :: создание и 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)');
0
Он доступен для использования 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',
];
}
, то вы можете выполнять запросы на поле 'местоположение'.
для хранения модели вы можете использовать:
$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
Смежные вопросы
- 1. Laravel, Eloquent Отношение n: m
- 2. Обработка данных с помощью Eloquent и Laravel
- 3. Laravel 5.1 eloquent Неподдерживаемые типы операндов
- 4. Обработка полей JSON/Array в Eloquent
- 5. Ускорить запрос Laravel Eloquent/MySQL
- 6. Обработка разговоров с использованием Laravel Eloquent
- 7. Eloquent Laravel
- 8. Обработка большого объема данных в Laravel 5
- 9. Пространственные типы данных для платформы данных Microsoft Failed
- 10. Laravel Eloquent не сохраняет свойства в базе данных (возможно, mysql)
- 11. Laravel Eloquent
- 12. laravel eloquent многоязычная база данных
- 13. Последнее сообщение в разговоре mysql Laravel eloquent
- 14. Преобразовать MYSQL запрос в Laravel Eloquent ОРМ
- 15. конвертировать mysql-запрос в laravel eloquent?
- 16. MySQL Пространственные упрощенные геометрии
- 17. Laravel Eloquent Calculate
- 18. Как получить пространственные типы, работающие в EF?
- 19. MySQL Query to Laravel Eloquent Query
- 20. Laravel eloquent в цикле
- 21. , работающий с m: m отношениями в красноречивом внешнем laravel
- 22. mysql LIKE condition in laravel eloquent
- 23. Convert Mysql Query to Laravel Eloquent
- 24. Эквивалентные пространственные типы для оператора insert
- 25. Laravel Eloquent получить JSON из вложенных данных MySQL
- 26. Передача данных в Laravel With Eloquent
- 27. Laravel Eloquent Pagination
- 28. Службы данных WCF, структура сущностей и пространственные типы
- 29. Laravel Eloquent ORM Сделки
- 30. laravel eloquent search search
Может быть, это может помочь вам: http://www.codetutorial.io/geo -spatial-mysql-laravel-5/ – haakym
Ссылка, предоставленная @haakym, настолько полезна. Laravel не поддерживает эти типы изначально (посмотрите здесь https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Schema/Blueprint.php), но вы всегда можете запустить DB: statement() в ваши миграции или даже расширили класс Blueprint и добавили собственные методы поддержки этих типов данных. Лично я использую подход БД. – jhmilan