Size: a a a

Laravel для начинающих

2021 July 03

A

Artyom in Laravel для начинающих
Привет, кто-то может подсказать, у меня есть таблица категорий с множеством подкатегорий, мне нужно чтоб, при удалении родительской категории, удалялись и его дети

Пытаюсь сделать колонке parent_id связь foreign с той же таблицой.

Миграция:
Schema::create('main_product_categories', function (Blueprint $table) {
   $table->id();
   $table->string('slug')->unique()->nullable()->index();
   $table->string("title")->unique();
   $table->unsignedBigInteger('parent_id')->default(0);
   //
// $table->unsignedBigInteger('parent_id')->nullable();
   //
   $table->foreign('parent_id')->references('id')->on('main_product_categories')
   ->onDelete('cascade');
   $table->timestamps();
   $table->softDeletes();
});

Если добавить полю nullable, выдает тоже  эту ошибку

Когда хочу создать новую категорию выдает ошибку:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`laravel`.`di3o1s19_main_product_categories`, CONSTRAINT di3o1s19_main_product_categories_parent_id_foreign FOREIGN KEY (`parent_id`) REFERENCES di3o1s19_main_product_categories (`id`) ON ) (SQL: insert into di3o1s19_main_product_categories (`title`, parent_id, slug, updated_at, `created_at`) values (Автомобильные запчасти, 0, avtomobilnye-zapchasti, 2021-07-03 00:27:51, 2021-07-03 00:27:51))
источник

SG

Sergey Gerasimov in Laravel для начинающих
У тебя parent_id записывает 0
источник

A

Artyom in Laravel для начинающих
Если добавить полю nullable, выдает тоже эту ошибку
источник

SG

Sergey Gerasimov in Laravel для начинающих
А по 0 он не может найти запись в бд для внешнего ключа
источник

A

Artyom in Laravel для начинающих
$table->unsignedBigInteger('parent_id')->nullable();
источник

SG

Sergey Gerasimov in Laravel для начинающих
У тебя не null, а 0
источник

A

Artyom in Laravel для начинающих
$table->unsignedBigInteger('parent_id')->nullable();
источник

SG

Sergey Gerasimov in Laravel для начинающих
Причем тут бд
источник

A

Artyom in Laravel для начинающих
Когда столбец был NULL тоже была ошибка
источник

SG

Sergey Gerasimov in Laravel для начинающих
У тебя передаётся 0
источник

A

Artyom in Laravel для начинающих
А понял, сейчас попробую
источник

SG

Sergey Gerasimov in Laravel для начинающих
0 и NULL это вообще разные значения...
источник

A

Artyom in Laravel для начинающих
А если мне именно, чтоб обозначить что это родитель, лучше 0 передавать, как быть?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Если хочешь 0, тогда без внешнего ключа и разруливай на уровне фреймворка, по  мне лучше null всё же для родителя
источник

ПЛ

Павел Ланчев... in Laravel для начинающих
никак
ты понимаешь, что такое foreign key?
источник

AE

Andrey Eig in Laravel для начинающих
Подскажите, как в данном случае сделать фильтрацию? Делаю выборку для текущего пользователя, получаю список его подписчиков; здесь же в map() делаю подсчет подписчиков у каждого его подписчика (по логике нужно найти активных и неактивных).
В итоге я получаю коллекцию с объектами, в которых число count(). Как мне теперь для текущей коллекции получить количество объектов (то бишь подписчиков), у которых этот count() больше 3 например? Это легко сделать с помощью цикла уже после выборки, но нужно в этой же выборке сделать. whereHas? но тогда в какое место его вписать? по примерам смотрел, если честно так и не понял как это должно быть в итоге.
источник

SG

Sergey Gerasimov in Laravel для начинающих
Ну он может создать запись с id = 0
источник

SG

Sergey Gerasimov in Laravel для начинающих
Почему сразу никак 😏
источник

ПЛ

Павел Ланчев... in Laravel для начинающих
нууу
может
но чёт такое
источник

SG

Sergey Gerasimov in Laravel для начинающих
Изменить логику и никогда так больше не писать 😏
источник