Modelo Laravel com POINT / POLYGON etc. usando expressões DB :: raw
Eu tenho alguns modelos que usam campos geoespaciais comoPOINT
, POLYGON
ouMULTIPOLYGON
. Gostaria de dizer ao meu modelo para processar esses atributos de uma maneira especial, para que eu obtenha os atributos de modelo desejados.
Exemplo: Todos os regularesModel::find()
ou outro método Eloquent deve aplicar algum código personalizado antes de armazenar ou recuperar um valor do banco de dados.
$area->surface
é umPOLYGON
no MySQL, mas na minha classe de modelo eu gostaria de lidar$area->surfare
como uma matriz de pontos.
EmSELECT
Portanto, eu gostaria de 1) buscar o valor usando uma expressão bruta para obter uma representação de texto do valor e 2) passar por algum código PHP personalizado para converter a string WKT em uma matriz.
EmINSERT/UPDATE
Eu gostaria de pegar o valor do atributo (uma matriz) e 1) convertê-lo em uma sequência WKT, após o que 2) é gravado no banco de dados usando uma instrução bruta de banco de dados que armazena o valor.
Eu gostaria de definir isso com base no campo, não como funções especiais de obter / definir para cada campo, e não nos controladores - porque tenho muitos campos geoespaciais.
Existe uma maneira de conseguir isso no Laravel?
(Uma versão mais abstrata da mesma pergunta é como eu posso criar código que manipula valores de atributos para as consultas SQL reais, em vez de apenas uma manipulação baseada em valor via mutadores e acessadores)
ATUALIZAR: Analisando mais profundamente o Doc e a API do Laravel, descobri que talvez oEloquent::newQuery()
método é o que eu preciso manipular? Isso seria usado para qualquer consulta, independentemente deSELECT
, INSERT
ouUPDATE
?