Значение по умолчанию типа Point - PullRequest
0 голосов
/ 26 сентября 2018

В миграциях Laravel, что я должен использовать в качестве значения по умолчанию для столбца типа Point?Сначала я хотел сохранить его NULL, но затем прочитал , что:

Столбцы в пространственных индексах должны быть объявлены как NOT NULL.

Итак, что я должен использовать в качестве значения по умолчанию для моего столбца и как его указать в миграции, чтобы представить NULL, что-то вроде 0,0 или -1,-1?

$table->point('location')->default(???);

ОБНОВЛЕНИЕ

Проведя дополнительные исследования, я обнаружил еще большую проблему.MySQL не позволяет указывать значение по умолчанию для столбца типа POINT.Поэтому я должен вставить NULL -эквивалент в INSERT времени.Какое значение будет правильным для этой цели?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я не знаю, является ли это вашим случаем, но если вы пытаетесь добавить столбец в существующую таблицу, а затем добавить пространственный индекс к этому при миграции, то способ, который я нахожу для решения этой проблемы в MySQL, былне элегантное решение, но сработало:

Schema::table('table', function(Blueprint $table)
{
    // Add the new nullable column
    $table->point('column')->nullable();
});
// You must separate this to ensure the execution order
Schema::table('table', function(Blueprint $table)
{
    // Insert the dummy values on the column
    DB::statement("UPDATE `table` SET `column` = POINT(0,90);");
    // Set the column to not null
    DB::statement("ALTER TABLE `table` CHANGE `column` `column` POINT NOT NULL;");

    // Finally add the spatial index
    $table->spatialIndex('column');
});
0 голосов
/ 04 февраля 2019

Используя MariaDB, я мог бы успешно вставить его с:

-> default (DB :: raw ("POINT (0,90)"))

...