Вече решихме това общо за всички модели, като разширихме нашия базов модел със следната функционалност:
- Ние дефинираме масив от атрибути, които съдържат геометрични данни.
- Решаваме база за всеки модел, ако искаме това да се зарежда автоматично като текст.
- Променяме конструктора на заявки по подразбиране, за да изберем геометричните атрибути като текст от базата данни.
Ето откъс от базовия модел, който сега използваме:
/**
* The attributes that hold geometrical data.
*
* @var array
*/
protected $geometry = array();
/**
* Select geometrical attributes as text from database.
*
* @var bool
*/
protected $geometryAsText = false;
/**
* Get a new query builder for the model's table.
* Manipulate in case we need to convert geometrical fields to text.
*
* @param bool $excludeDeleted
* @return \Illuminate\Database\Eloquent\Builder
*/
public function newQuery($excludeDeleted = true)
{
if (!empty($this->geometry) && $this->geometryAsText === true)
{
$raw = '';
foreach ($this->geometry as $column)
{
$raw .= 'AsText(`' . $this->table . '`.`' . $column . '`) as `' . $column . '`, ';
}
$raw = substr($raw, 0, -2);
return parent::newQuery($excludeDeleted)->addSelect('*', DB::raw($raw));
}
return parent::newQuery($excludeDeleted);
}