Я использую Symfony 4 и Doctrine2-Spatial. Документация руководство по настройке гласит:
Добавьте типы и функции, которые вам нужны, в файл конфигурации Symfony. Имена типов доктрин не жестко запрограммированы».
И есть пример:
doctrine:
dbal:
types:
geometry: CrEOF\Spatial\DBAL\Types\GeometryType
point: CrEOF\Spatial\DBAL\Types\Geometry\PointType
polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
Мне нужно использовать тип MultiLineString, но такого класса типа нет в каталоге CrEOF\Spatial\DBAL\Types\Geometry\
. Я добавил MultiLineStringType (копию класса LineStringType) в свой каталог App\Doctrine
и добавил строку в конфигурацию доктрины следующим образом:
multilinestring: App\Doctrine\MultiLineStringType
Затем в моем контроллере я делаю следующее:
$parser = new \CrEOF\Geo\WKT\Parser($multilinestring);
$geo = $parser->parse();
$path = new \CrEOF\Spatial\PHP\Types\Geometry\MultiLineString($geo['value']);
$route->setPath($path); // The multilinestring field type
Но затем, когда я сохраняю свою сущность доктрины, я получаю исключение
Значения столбцов Geometry должны реализовывать GeometryInterface
Пожалуйста помогите. Что я делаю неправильно? Документация очень плохая...
UPD: Если я помещаю многострочные данные с помощью собственного SQL-запроса следующим образом:
UPDATE Routes SET Path=PolyFromText(MULTILINESTRING (....)) WHERE Id=1
а потом получить данные через ORM $entity->getPath()
У меня получился нормальный CrEOF\Spatial\PHP\Types\Geometry\MultiLineString
объект. Итак, я предполагаю, что проблема в моем контроллере, где я пытаюсь установить объект MultiLineString.
MultiLineStringType
расширяетGeometryType
CrEOF? 12.11.2018