Verification: a143cc29221c9be0

Php array как удалить ключ

Введение

Миграции похожи на контроль версий для вашей базы данных, позволяют вашей команде определять схемы базы данных приложения и совместно использовать их определение. Если вам когда-либо приходилось указывать товарищу по команде вручную добавить столбец в его схему локальной базы данных после применения изменений в системе управления версиями, то вы столкнулись с проблемой, которую решает миграция базы данных.

Фасад Schema обеспечивает независимую от базы данных поддержку для создания и управления таблицами во всех поддерживаемых Laravel системах баз данных. В обычной ситуации, этот фасад используется для создания и изменения таблиц / столбцов базы данных во время миграции.

Генерация миграций

Чтобы сгенерировать новую миграцию базы данных, используйте команду make:migration Artisan. Эта команда поместит новый класс миграции в каталог database/migrations вашего приложения. Каждое имя файла миграции содержит временную метку, которая позволяет Laravel определять порядок применения миграций:

php artisan make:migration create_flights_table

Laravel будет использовать имя миграции, чтобы попытаться угадать имя таблицы и будет ли миграция создавать новую таблицу. Если Laravel может определить имя таблицы по имени миграции, то сгенерированный файл миграции будет предварительно заполнен указанной таблицей. В противном случае вы можете просто вручную указать таблицу в файле миграции.

Если вы хотите указать собственный путь для сгенерированной миграции, вы можете использовать параметр --path при выполнении команды make:migration. Указанный путь должен быть относительно базового пути вашего приложения.

Заготовки миграции можно настроить с помощью публикации заготовок.

Сжатие миграций

По мере создания приложения вы можете со временем накапливать все больше и больше миграций. Это может привести к тому, что ваш каталог database/migrations станет раздутым из-за потенциально сотен миграций. Если хотите, то можете «сжать» свои миграции в один файл SQL. Для начала выполните команду schema:dump:

php artisan schema:dump


php artisan schema:dump --prune

Когда вы выполните эту команду, Laravel запишет файл «схемы» в каталог database/schema вашего приложения. Теперь, когда вы попытаетесь перенести свою базу данных, Laravel сначала выполнит SQL-операторы файла схемы, при условии, что никакие другие миграции не выполнялись. После выполнения команд файла схемы, Laravel выполнит все оставшиеся миграции, которые не были включены в дамп схемы БД.

Вы должны передать файл схемы базы данных в систему управления версиями, чтобы другие новые разработчики в вашей команде могли быстро воссоздать исходную структуру базы данных вашего приложения.

Сжатие миграции доступно только для баз данных MySQL, PostgreSQL и SQLite и использует клиент командной строки базы данных. Дампы схемы не могут быть восстановлены в базах данных SQLite, хранимых в памяти.

Структура миграций

Класс миграции содержит два метода: up и down. Метод up используется для добавления новых таблиц, столбцов или индексов в вашу базу данных, тогда как метод down должен отменять операции, выполняемые методом up.

В обоих этих методах вы можете использовать построитель схем Laravel для выразительного создания и изменения таблиц. Чтобы узнать обо всех методах, доступных построителю Schema, просмотрите его документацию. Например, следующая миграция создает таблицу flights:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFlightsTable extends Migration
{
    
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    
    public function down()
    {
        Schema::drop('flights');
    }
}

Анонимные миграции

Как вы могли заметить в примере выше, Laravel автоматически присваивает имя класса всем миграциям, которые вы создаете с помощью команды make:migration. Однако, если вы хотите, вы можете вернуть анонимный класс из вашего файла миграции. Это может быть полезно, если в вашем приложении накопилось много миграций и некоторые имеют одинаковые названия.

use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
    
};

Указание соединения миграции

Если ваша миграция будет использовать соединение с базой данных, отличное от соединения с базой данных по умолчанию для вашего приложения, то необходимо установить свойство $connection миграции:


protected $connection = 'pgsql';


public function up()
{
    
}

Запуск миграций

Чтобы запустить все незавершенные миграции, выполните команду migrate Artisan:

php artisan migrate

Если вы хотите узнать, какие миграции уже выполнены, то вы можете использовать команду migrate:status Artisan:

php artisan migrate:status

Принудительный запуск миграции в рабочем окружении

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

php artisan migrate --force

Откат миграций

Чтобы откатить последнюю операцию миграции, вы можете использовать команду rollback Artisan. Эта команда откатывает последний «пакет» миграций, который может включать несколько файлов миграции:

php artisan migrate:rollback

Вы можете откатить ограниченное количество миграций, указав параметр step для команды rollback. Например, следующая команда откатит последние пять миграций:

php artisan migrate:rollback --step=5

Команда migrate:reset откатит все миграции вашего приложения:

php artisan migrate:reset

Откат и миграция с помощью одной команды

Команда migrate:refresh откатит все ваши миграции, а затем выполнит команду migrate. Эта команда эффективно воссоздает всю вашу базу данных:

php artisan migrate:refresh


php artisan migrate:refresh --seed

Вы можете откатить и повторно запустить ограниченное количество миграций, указав параметр step для команды refresh. Например, следующая команда откатит и повторно запустит последние пять миграций:

php artisan migrate:refresh --step=5

Удаление всех таблиц с последующей миграцией

Команда migrate:fresh удалит все таблицы из базы данных, а затем выполнит команду migrate:

php artisan migrate:fresh

php artisan migrate:fresh --seed
Команда migrate:fresh удалит все таблицы базы данных независимо от их префикса. Эту команду следует использовать с осторожностью при разработке в базе данных, которая используется совместно с другими приложениями.

Таблицы

Создание таблиц

Чтобы создать новую таблицу базы данных, используйте метод create фасада Schema. Метод create принимает два аргумента: первый – это имя таблицы, а второй – замыкание, которое получает объект Blueprint, используемый для определения новой таблицы:

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email');
    $table->timestamps();
});

При создании таблицы вы можете использовать любой из методов столбцов построителя схемы для определения столбцов таблицы.

Проверка наличия таблицы / столбца

Вы можете проверить наличие таблицы или столбца с помощью методов hasTable и hasColumn, соответственно:

if (Schema::hasTable('users')) {
    
}

if (Schema::hasColumn('users', 'email')) {
    
}

Соединение с базой данных и параметры таблицы

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

Schema::connection('sqlite')->create('users', function (Blueprint $table) {
    $table->id();
});

Кроме того, некоторые другие свойства и методы могут использоваться для определения других аспектов создания таблицы. Свойство engine используется для указания механизма хранения таблицы при использовании MySQL:

Schema::create('users', function (Blueprint $table) {
    $table->engine = 'InnoDB';

    
});

Свойства charset и collation могут использоваться для указания набора символов и сопоставления для создаваемой таблицы при использовании MySQL:

Schema::create('users', function (Blueprint $table) {
    $table->charset = 'utf8mb4';
    $table->collation = 'utf8mb4_unicode_ci';

    
});

Метод temporary используется, чтобы указать, что таблица должна быть «временной». Временные таблицы видны только текущему сеансу соединения базы данных и автоматически удаляются при закрытии соединения:

Schema::create('calculations', function (Blueprint $table) {
    $table->temporary();

    
});

Обновление таблиц

Метод table фасада Schema используется для обновления существующих таблиц. Подобно методу create, метод table принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр Blueprint, используемый для добавления столбцов или индексов в таблицу:

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('users', function (Blueprint $table) {
    $table->integer('votes');
});

Переименование / удаление таблиц

Чтобы переименовать существующую таблицу базы данных, используйте метод rename:

use Illuminate\Support\Facades\Schema;

Schema::rename($from, $to);

Чтобы удалить существующую таблицу, вы можете использовать методы drop или dropIfExists:

Schema::drop('users');

Schema::dropIfExists('users');

Переименование таблиц с внешними ключами

Перед переименованием таблицы вы должны убедиться, что любые ограничения внешнего ключа в таблице имеют явное имя в ваших файлах миграции, вместо того, чтобы позволять Laravel назначать имя на основе соглашения. В противном случае, имя ограничения внешнего ключа будет ссылаться на имя старой таблицы.

Столбцы

Создание столбцов

Метод table фасада Schema используется для обновления существующих таблиц. Как и метод create, метод table принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр Illuminate\Database\Schema\Blueprint, используемый для добавления столбцов в таблицу:

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('users', function (Blueprint $table) {
    $table->integer('votes');
});

Доступные типы столбцов

Построитель схем Blueprint предлагает множество методов, соответствующих различным типам столбцов, которые вы можете добавить в таблицы базы данных. Все доступные методы перечислены в таблице ниже:

  • bigIncrements
  • bigInteger
  • binary
  • boolean
  • char
  • dateTimeTz
  • dateTime
  • date
  • decimal
  • double
  • enum
  • float
  • foreignId
  • geometryCollection
  • geometry
  • id
  • increments
  • integer
  • ipAddress
  • json
  • jsonb
  • lineString
  • longText
  • macAddress
  • mediumIncrements
  • mediumInteger
  • mediumText
  • morphs
  • multiLineString
  • multiPoint
  • multiPolygon
  • nullableMorphs
  • nullableTimestamps
  • nullableUuidMorphs
  • point
  • polygon
  • rememberToken
  • set
  • smallIncrements
  • smallInteger
  • softDeletesTz
  • softDeletes
  • string
  • text
  • timeTz
  • time
  • timestampTz
  • timestamp
  • timestampsTz
  • timestamps
  • tinyIncrements
  • tinyInteger
  • tinyText
  • unsignedBigInteger
  • unsignedDecimal
  • unsignedInteger
  • unsignedMediumInteger
  • unsignedSmallInteger
  • unsignedTinyInteger
  • uuidMorphs
  • uuid
  • year

bigIncrements()

Метод bigIncrements создает эквивалент автоинкрементного столбца UNSIGNED BIGINT (первичный ключ):

$table->bigIncrements('id');

bigInteger()

Метод bigInteger создает эквивалент столбца BIGINT:

$table->bigInteger('votes');

binary()

Метод binary создает эквивалент столбца BLOB:

$table->binary('photo');

boolean()

Метод boolean создает эквивалент столбца BOOLEAN:

$table->boolean('confirmed');

char()

Метод char создает эквивалент столбца CHAR указанной длины:

$table->char('name', 100);

dateTimeTz()

Метод dateTimeTz создает эквивалент столбца DATETIME (с часовым поясом) с необязательной точностью (общее количество цифр):

$table->dateTimeTz('created_at', $precision = 0);

dateTime()

Метод dateTime создает эквивалент столбца DATETIME с необязательной точностью (общее количество цифр):

$table->dateTime('created_at', $precision = 0);

date()

Метод date создает эквивалент столбца DATE:

$table->date('created_at');

decimal()

Метод decimal создает эквивалент столбца DECIMAL с точностью (общее количество цифр) и масштабом (десятичные цифры):

$table->decimal('amount', $precision = 8, $scale = 2);

double()

Метод double создает эквивалент столбца DOUBLE с точностью (общее количество цифр) и масштабом (десятичные цифры):

$table->double('amount', 8, 2);

enum()

Метод enum создает эквивалент столбца ENUM с указанием допустимых значений:

$table->enum('difficulty', ['easy', 'hard']);

float()

Метод float создает эквивалент столбца FLOAT с точностью (общее количество цифр) и масштабом (десятичные цифры):

$table->float('amount', 8, 2);

foreignId()

Метод foreignId является псевдонимом метода unsignedBigInteger:

$table->foreignId('user_id');

geometryCollection()

Метод geometryCollection создает эквивалент столбца GEOMETRYCOLLECTION:

$table->geometryCollection('positions');

geometry()

Метод geometry создает эквивалент столбца GEOMETRY:

$table->geometry('positions');

id()

Метод id является псевдонимом метода bigIncrements. По умолчанию метод создает столбец id; однако, вы можете передать имя столбца, если хотите присвоить столбцу другое имя:

$table->id();

increments()

Метод increments создает эквивалент автоинкрементного столбца UNSIGNED INTEGER в качестве первичного ключа:

$table->increments('id');

integer()

Метод integer создает эквивалент столбца INTEGER:

$table->integer('votes');

ipAddress()

Метод ipAddress создает эквивалент столбца VARCHAR:

$table->ipAddress('visitor');

json()

Метод json создает эквивалент столбца JSON:

$table->json('options');

jsonb()

Метод jsonb создает эквивалент столбца JSONB:

$table->jsonb('options');

lineString()

Метод lineString создает эквивалент столбца LINESTRING:

$table->lineString('positions');

longText()

Метод longText создает эквивалент столбца LONGTEXT:

$table->longText('description');

macAddress()

Метод macAddress создает столбец, предназначенный для хранения MAC-адреса. Некоторые системы баз данных, такие как PostgreSQL, имеют специальный тип столбца для этого типа данных. Другие системы баз данных будут использовать столбец строкового эквивалента:

$table->macAddress('device');

mediumIncrements()

Метод mediumIncrements создает эквивалент автоинкрементного столбца UNSIGNED MEDIUMINT в качестве первичного ключа:

$table->mediumIncrements('id');

mediumInteger()

Метод mediumInteger создает эквивалент столбца MEDIUMINT:

$table->mediumInteger('votes');

mediumText()

Метод mediumText создает эквивалент столбца MEDIUMTEXT:

$table->mediumText('description');

morphs()

Метод morphs – это удобный метод, который добавляет эквивалент столбца UNSIGNED BIGINT ({column}_id) и эквивалент столбца VARCHAR ({column}_type).

Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent. В следующем примере будут созданы столбцы taggable_id и taggable_type:

$table->morphs('taggable');

multiLineString()

Метод multiLineString создает эквивалент столбца MULTILINESTRING:

$table->multiLineString('positions');

multiPoint()

Метод multiPoint создает эквивалент столбца MULTIPOINT:

$table->multiPoint('positions');

multiPolygon()

Метод multiPolygon создает эквивалент столбца MULTIPOLYGON:

$table->multiPolygon('positions');

nullableTimestamps()

Метод аналогичен методу timestamps; тем не менее, создаваемый столбец будет иметь значение NULL:

$table->nullableTimestamps(0);

nullableMorphs()

Метод аналогичен методу morphs; тем не менее, создаваемый столбец будет иметь значение NULL:

$table->nullableMorphs('taggable');

nullableUuidMorphs()

Метод аналогичен методу uuidMorphs; тем не менее, создаваемый столбец будет иметь значение NULL:

$table->nullableUuidMorphs('taggable');

point()

Метод point создает эквивалент столбца POINT:

$table->point('position');

polygon()

Метод polygon создает эквивалент столбца POLYGON:

$table->polygon('position');

rememberToken()

Метод rememberToken создает NULL-эквивалент столбца VARCHAR(100), предназначенный для хранения текущего токена аутентификации:

$table->rememberToken();

set()

Метод set создает эквивалент столбца SET с заданным списком допустимых значений:

$table->set('flavors', ['strawberry', 'vanilla']);

smallIncrements()

Метод smallIncrements создает эквивалент автоинкрементного столбца UNSIGNED SMALLINT в качестве первичного ключа:

$table->smallIncrements('id');

smallInteger()

Метод smallInteger создает эквивалент столбца SMALLINT:

$table->smallInteger('votes');

softDeletesTz()

Метод softDeletesTz добавляет NULL-эквивалент столбца TIMESTAMP (с часовым поясом) с необязательной точностью (общее количество цифр). Этот столбец предназначен для хранения временной метки deleted_at, необходимой для функции «программного удаления» Eloquent:

$table->softDeletesTz($column = 'deleted_at', $precision = 0);

softDeletes()

Метод softDeletes добавляет NULL-эквивалент столбца TIMESTAMP с необязательной точностью (общее количество цифр). Этот столбец предназначен для хранения временной метки deleted_at, необходимой для функции «программного удаления» Eloquent:

$table->softDeletes($column = 'deleted_at', $precision = 0);

string()

Метод string создает эквивалент столбца VARCHAR указанной длины:

$table->string('name', 100);

text()

Метод text создает эквивалент столбца TEXT:

$table->text('description');

timeTz()

Метод timeTz создает эквивалент столбца TIME (с часовым поясом) с необязательной точностью (общее количество цифр):

$table->timeTz('sunrise', $precision = 0);

time()

Метод time создает эквивалент столбца TIME с необязательной точностью (общее количество цифр):

$table->time('sunrise', $precision = 0);

timestampTz()

Метод timestampTz создает эквивалент столбца TIMESTAMP (с часовым поясом) с необязательной точностью (общее количество цифр):

$table->timestampTz('added_at', $precision = 0);

timestamp()

Метод timestamp создает эквивалент столбца TIMESTAMP с необязательной точностью (общее количество цифр):

$table->timestamp('added_at', $precision = 0);

timestampsTz()

Метод timestampsTz создает столбцы created_at и updated_at, эквивалентные TIMESTAMP (с часовым поясом) с необязательной точностью (общее количество цифр):

$table->timestampsTz($precision = 0);

timestamps()

Метод timestamps method creates created_at and updated_at TIMESTAMP с необязательной точностью (общее количество цифр):

$table->timestamps($precision = 0);

tinyIncrements()

Метод tinyIncrements создает эквивалент автоинкрементного столбца UNSIGNED TINYINT в качестве первичного ключа:

$table->tinyIncrements('id');

tinyInteger()

Метод tinyInteger создает эквивалент столбца TINYINT:

$table->tinyInteger('votes');

tinyText()

Метод tinyText создаёт эквивалент столбца TINYTEXT:

$table->tinyText('notes');    

unsignedBigInteger()

Метод unsignedBigInteger создает эквивалент столбца UNSIGNED BIGINT:

$table->unsignedBigInteger('votes');

unsignedDecimal()

Метод unsignedDecimal создает эквивалент столбца UNSIGNED DECIMAL с необязательной точностью (общее количество цифр) и масштабом (десятичные цифры):

$table->unsignedDecimal('amount', $precision = 8, $scale = 2);

unsignedInteger()

Метод unsignedInteger создает эквивалент столбца UNSIGNED INTEGER:

$table->unsignedInteger('votes');

unsignedMediumInteger()

Метод unsignedMediumInteger создает эквивалент столбца UNSIGNED MEDIUMINT:

$table->unsignedMediumInteger('votes');

unsignedSmallInteger()

Метод unsignedSmallInteger создает эквивалент столбца UNSIGNED SMALLINT:

$table->unsignedSmallInteger('votes');

unsignedTinyInteger()

Метод unsignedTinyInteger создает эквивалент столбца UNSIGNED TINYINT:

$table->unsignedTinyInteger('votes');

uuidMorphs()

Метод uuidMorphs – это удобный метод, который добавляет эквивалент столбца CHAR(36) ({column}_id) и эквивалент столбца VARCHAR ({column}_type).

Этот метод предназначен для использования при определении столбцов, необходимых для полиморфного отношения Eloquent, использующего идентификаторы UUID. В следующем примере будут созданы столбцы taggable_id и taggable_type:

$table->uuidMorphs('taggable');

uuid()

Метод uuid создает эквивалент столбца UUID:

$table->uuid('id');

year()

Метод year создает эквивалент столбца YEAR:

$table->year('birth_year');

Модификаторы столбца

В дополнение к типам столбцов, перечисленным выше, есть несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбца в таблицу базы данных. Например, чтобы сделать столбец «допускающим значение NULL», вы можете использовать метод nullable:

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->nullable();
});

В следующей таблице представлены все доступные модификаторы столбцов. В этот список не входят модификаторы индексов:

Модификатор Описание
->after('column') Поместить столбец «после» другого столбца (MySQL).
->autoIncrement() Установить столбцы INTEGER как автоинкрементные (первичный ключ).
->charset('utf8mb4') Указать набор символов для столбца (MySQL).
->collation('utf8mb4_unicode_ci') Указать параметры сравнения для столбца (MySQL/PostgreSQL/SQL Server).
->comment('my comment') Добавить комментарий к столбцу (MySQL/PostgreSQL).
->default($value) Указать значение «по умолчанию» для столбца.
->first() Поместить столбец «первым» в таблице (MySQL).
->from($integer) Установить начальное значение автоинкрементного поля (MySQL / PostgreSQL).
->nullable($value = true) Позволить (по умолчанию) значения NULL для вставки в столбец.
->storedAs($expression) Создать сохраненный генерируемый столбец (MySQL).
->unsigned() Установить столбцы INTEGER как UNSIGNED (MySQL).
->useCurrent() Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP в качестве значения по умолчанию.
->useCurrentOnUpdate() Установить столбцы TIMESTAMP для использования CURRENT_TIMESTAMP при обновлении записи.
->virtualAs($expression) Создать виртуальный генерируемый столбец (MySQL).
->generatedAs($expression) Создать столбец идентификаторов с указанными параметрами последовательности (PostgreSQL).
->always() Определить приоритет значений последовательности над вводом для столбца идентификаторов (PostgreSQL).

Выражения для значений по умолчанию

Модификатор default принимает значение или экземпляр Illuminate\Database\Query\Expression. Использование экземпляра Expression не позволит Laravel заключить значение в кавычки и позволит вам использовать функции, специфичные для базы данных. Одна из ситуаций, когда это особенно полезно, когда вам нужно назначить значения по умолчанию для столбцов JSON:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Query\Expression;
use Illuminate\Database\Migrations\Migration;

class CreateFlightsTable extends Migration
{
    
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->json('movies')->default(new Expression('(JSON_ARRAY())'));
            $table->timestamps();
        });
    }
}
Поддержка выражений по умолчанию зависит от вашего драйвера базы данных, версии базы данных и типа поля. См. документацию к вашей базе данных.

Порядок столбцов

Метод after добавляет набор столбцов после указанного существующего столбца в схеме базы данных MySQL:

$table->after('password', function ($table) {
    $table->string('address_line1');
    $table->string('address_line2');
    $table->string('city');
});

Изменение столбцов

Необходимые компоненты

Перед изменением столбца вы должны установить пакет doctrine/dbal с помощью менеджера пакетов Composer. Библиотека Doctrine DBAL используется для определения текущего состояния столбца и для создания запросов SQL, необходимых для внесения запрошенных изменений в столбец:

composer require doctrine/dbal

Если вы планируете изменять столбцы, созданные с помощью метода timestamp, вы также должны добавить следующую конфигурацию в файл config/database.php вашего приложения:

use Illuminate\Database\DBAL\TimestampType;

'dbal' => [
    'types' => [
        'timestamp' => TimestampType::class,
    ],
],
Если ваше приложение использует Microsoft SQL Server, то убедитесь, что вы установили doctrine/dbal:^3.0.

Обновление атрибутов столбца

Метод change позволяет вам изменять тип и атрибуты существующих столбцов. Например, вы можете увеличить размер string столбца. Чтобы увидеть метод change в действии, давайте увеличим размер столбца name до 50. Для этого мы просто определяем новое состояние столбца и затем вызываем метод change:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

Мы также можем изменить столбец, чтобы он допускал значение NULL:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});
Только следующие типы столбцов могут быть изменены: bigInteger, binary, boolean, date, dateTime, dateTimeTz, decimal, integer, json, longText, mediumText, smallInteger, string, text, time, unsignedBigInteger, unsignedInteger, unsignedSmallInteger, и uuid. Чтобы изменить типа столбца timestamp у вас должна быть установлена библиотека Doctrine DBAL.

Переименование столбцов

Чтобы переименовать столбец, вы можете использовать метод renameColumn построителя схемы Blueprint. Перед переименованием столбца убедитесь, что вы установили библиотеку doctrine/dbal через менеджер пакетов Composer:

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});
Переименование enum столбца в настоящее время не поддерживается.

Удаление столбцов

Чтобы удалить столбец, вы можете использовать метод dropColumn построителя схемы Blueprint. Если ваше приложение использует базу данных SQLite, то вы должны установить библиотеку doctrine/dbal через менеджер пакетов Composer, прежде чем использовать метод dropColumn:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});

Вы можете удалить несколько столбцов из таблицы, передав массив имен столбцов методу dropColumn:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});
Удаление или изменение нескольких столбцов в рамках одной миграции при использовании базы данных SQLite не поддерживается.

Доступные псевдонимы команд

Laravel содержит несколько удобных методов, связанных с удалением общих типов столбцов. Каждый из этих методов описан в таблице ниже:

Команда Описание
$table->dropMorphs('morphable'); Удалить столбцы morphable_id и morphable_type.
$table->dropRememberToken(); Удалить столбец remember_token.
$table->dropSoftDeletes(); Удалить столбец deleted_at.
$table->dropSoftDeletesTz(); Псевдоним dropSoftDeletes().
$table->dropTimestamps(); Удалить столбцы created_at и updated_at.
$table->dropTimestampsTz(); Псевдоним dropTimestamps().

Обзор

Эта функция удаляет значение подполя существующего поля повторителя или гибкого содержимого. Если используется в цикле have_rows(), текущая строка будет использоваться для удаления значения подполя. Если используется вне цикла have_rows(), идентификаторы строк и родителей могут быть указаны для задания правильного значения подполя.

История изменений

  • Добавлено в v5.0.0

Параметры

delete_sub_field( $selector, [$post_id] );
  • $selector (смешанный) (обязательное) Имя или ключ подполя, или массив родителей и номера строки.
  • $post_id (число) ID поста для которого будет сохраняться значение.

Возвращает

Функция возвращает true в случае успеха и false при неудаче.

Примеры

Внутри цикла have_rows()

Будет выполнен обход поля повторителя и удаление значения подполя. В этом примере показывается, как использовать функцию delete_sub_field() внутри цикла have_rows().

if( have_rows('repeater') ) {

	while( have_rows('repeater') ) {

		the_row();
		
		if( get_sub_field('color') == 'красный' ) {
			
			delete_sub_field('color');
			
		}
		
	}

}

?>

Вне цикла have_rows()

В этом примере будет удалено значение подполя вне цикла have_rows(). Обратите внимание, что параметру $selector присваивается массив, содержащий комбинацию имен полей и номеров строк. Этот массив должен читать слева направо, отношения родителей с детьми, дополненные номером строки.

  • Строки начинаются с 1 (не с 0). К примеру, первая строка значений будет $i = 1
  • Можно изменить индекс с которого начинаются строки. Для этого воспользуйтесь row_index_offset.

В примере показано как удалить подполе первой строки повторителя.

delete_sub_field( array('repeater', 1, 'color') );

?>

Вложенные поля повторителя

Функция delete_sub_field() будет корректно работать с вложенными полями повторителя как внутри, так и снаружи цикла have_rows(). Этот пример продемонстрирует, как это возможно в обоих случаях.

if( have_rows('repeater') ) {

	while( have_rows('repeater') ) {

		the_row();

		
		if( have_rows('sub_repeater') ) {

			while( have_rows('sub_repeater') ) {

				the_row();

				delete_sub_field('sub_sub_field');

			}
			

		}
		

	}
	

}


?>
delete_sub_field( array('repeater', 1, 'sub_repeater', 1, 'sub_sub_field') );

?>

Удаление элемента в массиве по его ключу

Если известен ключ элемента, то задача очень проста. Функция unset() позволяет удалить элемент массива или любую переменную (так же будет очищена задействованная под переменную память компьютера).

Например, имеем массив:

$myArr = array(1,2,3,4,5);

Для удаления элемента со значением "3" используем код:

unset($myArr[2]);

Обратите внимание, что указывается не значение (3), а ключ элемента (2), начинающийся, в данном случае с 0. Так, если нужно удалить первый элемент массива, то указываем нулевой элемент:

unset($myArr[0]);

Так же стоит учитывать, что после наших двух удалений, массив теперь содержит три элемента:

Array
(
[1] => 2
[3] => 4
[4] => 5
)

Все ключи оставшихся элементов сохраняются. Соответственно, если теперь нужно будет удалить первый элемент, то указывать надо будет в качестве ключа единицу. Поэтому, а так же, потому что мы не всегда знаем номер элемента в массиве, а лишь его значения такой вариант может не подходить.

Удаление элемента массива по его значению

Если ключ элемента не известен, а известно только значение массива, то придется перебрать все элементы массива циклом и удалить искомый. Например, удаляем элемент со значением "3":

$myArr = array(1,2,3,4,5);
foreach($myArr as $key => $item){
if ($item == 3){
unset($myArr[$key]);
}
}

Обратите внимание, что проверяется в условии значение массива, доступное в цикле в переменной $item, а при удалении, указывается ключ элемента (переменная $key).

Такое алгоритм подходит еще и в случае, если нужно удалить сразу группу элементов. Ведь здесь имеется условие, определяющее какие элементы удалять.

Цикл each (jQuery.each). Примеры использования

Синтаксис функции each:

// array или object - массив или объект, элементы или свойства которого необходимо перебрать
// callback - функция, которая будет выполнена для каждого элемента массива или свойства объекта
$.each(array или object,callback);

Работу с функцией each разберём на примерах.

Пример №1. В нём выполним переберор всех элементов массива (array).

// массив, состоящий из 3 строк
var arr = ['Автомобиль','Грузовик','Автобус'];

// переберём массив arr
$.each(arr,function(index,value){

  // действия, которые будут выполняться для каждого элемента массива
  // index - это текущий индекс элемента массива (число)
  // value - это значение текущего элемента массива
  
  //выведем индекс и значение массива в консоль
  console.log('Индекс: ' + index + '; Значение: ' + value);

});

/*
Результат (в консоли):
Индекс: 0; Значение: Автомобиль
Индекс: 1; Значение: Грузовик
Индекс: 2; Значение: Автобус
*/

В вышеприведённом коде функция each используется для перебора массива. Функция имеет 2 обязательных параметра. Первый параметр - это сущность (массив или объект), элементы (свойства) которой необходимо перебрать. В данном случае - это массив arr. Второй параметр - это функция обратного вызова, которая будет выполнена для каждого элемента (в данном случае) массива. Она имеет 2 параметра, которые доступны внутри неё посредством соответствующих переменных. Первый параметр - это порядковый номер элемента (отсчёт выполняется с 0). Второй параметр - это значение текущего элемента массива.

Пример №2. В этом примере осуществим перебор всех свойств объекта.

// объект smartphone, имеющий 5 свойств
var smartphone = {
  "name": "LG G5 se",
  "year": "2016",
  "screen-size": "5.3",
  "screen-resolution": "2560 x 1440",
  "os" : "Android 6.0 (Marshmallow)"
};

// переберём объект smartphone
$.each(smartphone, function( key, value ) {

  // действия, которые будут выполняться для каждого свойства объекта
  // key - текущее имя свойства массива
  // value - значение текущего свойства объекта
 
  // выведем имя свойства и его значение в консоль
  console.log( 'Свойство: ' +key + '; Значение: ' + value );

});

/*
Результат (в консоли):
Свойство: name; Значение: LG G5 se
Свойство: year; Значение: 2016
Свойство: screen-size; Значение: 5.3
Свойство: screen-resolution; Значение: 2560 x 1440
Свойство: os; Значение: Android 6.0 (Marshmallow)
*/

Функция each может использоваться для перебора JavaScript объектов. Отличие её использования заключается только в том, что параметры функции обратного вызова имеют другие значения. Первый параметр хранит название свойства объекта, а второй - значение этого свойства.

Пример №3. В нём осуществим перебор более сложной структуры (рассмотрим, как использовать вложенные each).

// объект, состоящий из 2 свойств. Каждое свойство этого объект имеет в качестве значения массив, элементами которого являются тоже объекты
var articles = {
  "Bootstrap": [
    {"id":"1", "title":"Введение"},
    {"id":"2", "title":"Как установить"},
    {"id":"3", "title":"Сетка"}
  ],
  "JavaScript": [
    {"id":"4", "title":"Основы"},
    {"id":"5", "title":"Выборка элементов"}
  ]  
};

$.each(articles,function(key,data) {
  console.log('Раздел: ' + key);
  $.each(data, function(index,value) {
    console.log('Статья: id = ' + value['id'] + '; Название = '+ value['title']);
  });
});

/*
Результат:
Раздел: Bootstrap
Статья: id = 1; Название = Введение
Статья: id = 2; Название = Как установить
Статья: id = 3; Название = Сетка
Раздел: JavaScript
Статья: id = 4; Название = Основы
Статья: id = 5; Название = Выборка элементов
*/

Как прервать each (выйти из цикла)

Прерывание (break) цикла each осуществляется с помощью оператора return, который должен возвращать значение false.

Например, прервём выполнение цикла each после того как найдём в массиве arr число 7:

// массив, состоящий из 5 чисел
var arr = [5, 4, 7, 17, 19];

// число, которое необходимо найти
var find = 7;

// переберём массив arr
$.each(arr, function (index, value) {
  // если необходимое число найдено, то..
  if (value === find) {
    // вывести его в консоль
    console.log('Ура! Число ' + find + ' найдено! Данное число имеет индекс: ' + index);
    // прервать выполнение цикла
    return false;
  } else {
  // иначе вывести в консоль текущее число
  console.log('Текущее число: ' + value);
  }
});

/* Результат (в консоли):
Текущее число: 5
Текущее число: 4
Ура! Число 7 найдено! Данное число имеет индекс: 2
*/

Как перейти к следующей итерации (each continue)

В each прерывание выполнения текущей итерации и переход к следующей осуществляется с помощью оператора return, который должен иметь значение отличное от false.

// массив, состоящий из чисел
var arr = [3, 5, 4, 9, 17, 19, 30, 35, 40];

// массив, который должен содержать все элементы массива arr, кроме чётных чисел
var newarr = [];

// переберём массив arr
$.each(arr, function (index, value) {

  // если элемент чётный, то пропустим его
  if (value % 2 === 0) {
    // прервём выполнение текущей итерации и перейдём к следующей
    return;
  }
  // добавить в массив newarr значение value
  newarr.push(value);

});

console.log('Исходный массив (arr): ' + arr.join());
console.log('Результирующий массив (newarr): ' + newarr.join());

/* Результат (в консоли):
Исходный массив (arr): 3,5,4,9,17,19,30,35,40
Результирующий массив (newarr): 3,5,9,17,19,35
*/