Bây giờ chúng tôi đã giải quyết vấn đề này một cách chung cho tất cả các mô hình bằng cách mở rộng mô hình cơ sở của chúng tôi với chức năng sau:
- Chúng tôi xác định một mảng các thuộc tính chứa dữ liệu hình học.
- Chúng tôi quyết định dựa trên từng mô hình nếu chúng tôi muốn điều này được tự động tải dưới dạng văn bản.
- Chúng tôi thay đổi trình tạo truy vấn mặc định để chọn các thuộc tính hình học dưới dạng văn bản từ cơ sở dữ liệu.
Đây là một đoạn trích từ mô hình cơ sở mà chúng tôi hiện đang sử dụng:
/**
* 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);
}