Я хочу обрезать свою пользовательскую таблицу перед seed. Я делаю так:
База данныхSeeder.php:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
public function run()
{
App\User::truncate();
factory(App\User::class,1)->create();
}
}
Затем запустите php artisan db:seed и получите ошибку:
In Connection.php line 664:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`)) (SQL: truncate `users`)
In Connection.php line 458:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`))
Теперь я хочу узнать, почему я не могу обрезать свою пользовательскую таблицу!






У вас есть ссылки на ваших пользователей в какой-то другой таблице. Вы должны добавить ->onDelete('cascade') в столбец таблицы не нравится, который ссылается на идентификатор пользователя, или сначала удалить все не нравится вручную.
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Существует проблема с внешним ключом, и таблица пытается напомнить вам об этом. Если вы все равно хотите обрезать таблицу.
Schema::disableForeignKeyConstraints();
// ... Some Truncate Query
Schema::enableForeignKeyConstraints();
Не забудьте использовать:
use Illuminate\Support\Facades\Schema;
Самый простой способ обрезать данные перед раздачей
Просто добавьте эту единственную строку в начале вашего метода запуска.
DB::table('users')->truncate();
Полный синтаксис с методом run
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class AdminSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->truncate();
DB::table('users')->insert([
'name' => 'Admin',
'email' => '[email protected]',
'is_admin' => 1,
'password' => Hash::make('password'),
]);
}
}
я использовал
cascadeво всех таких таблицах:$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');