Запретить удаление строки, если colomn ссылается на другую таблицу PHP | Laravel | mysql - PullRequest
1 голос
/ 02 апреля 2020

Итак, я делаю систему управления запасами (хобби-проект) на laravel. Но у меня есть несколько таблиц, таких как stock, device_type, location et c. В таблице «акции» есть поле с именем «device_type_id», которое ссылается на «id» в таблице «device_type». Я хочу настроить таблицу «device_type» таким образом, чтобы ни одна строка в таблице «device_type» не могла быть удалена, если «id» таблицы «device_type» совпадает с любым «device_type_id» в таблице «stocks». Любой совет?

миграция таблицы 'акции'

    public function up()
{
    Schema::create('stocks', function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('device_type_id');
        $table->string('make');
        $table->string('model');
        $table->string('spec');
        $table->string('condition');
        $table->string('suk')->nullable();
        $table->date('purchase_date');
        $table->string('inv')->nullable();
        $table->string('location');
        $table->string('assigned_to');
        $table->timestamps();

        $table->foreign('device_type')
            ->references('id')
            ->on('device_type');
    });
}

миграция таблицы 'device_type'

    public function up()
{
    Schema::create('device_type', function (Blueprint $table) {
        $table->id();
        $table->string('device_type');
        $table->timestamps();
    });
}

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Сначала создайте миграцию таблицы device_type, затем создайте миграцию таблицы запасов.

И в миграции таблицы запасов напишите внешний ключ следующим образом:

$table->foreign('device_type_id')->references('id')->on('device_type');
0 голосов
/ 03 апреля 2020

Вы можете добавить список для удаления типа и проверить, есть ли ссылка на тип, не удаляйте его, иначе вы можете удалить его:

в модели DeviceType добавить этот метод :

protected static function boot()
{
    parent::boot();

    static::deleting(function($type) {
        // assuming you have stocks relationship in your DeviceType model
        if ($type->stocks()->count() > 0) {
            return false;
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...