Laravel курс с нуля, база. 18. Отношения один ко многим

  Рет қаралды 33,547

Laravel Creative

Laravel Creative

Күн бұрын

Пікірлер: 201
@ДмитрийМорозов-ч5ф
@ДмитрийМорозов-ч5ф 2 жыл бұрын
Ребята у кого выдает ошибку SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table 'categories' (SQL: alter table `posts` add constraint `post_category_fk` foreign key (`category_id`) references `categories` (`id`)) . Вам просто нужно поменять местами миграции , меняете дату миграции так чтобы категория была создана раньше. Потом делаете php artisan migrate:fresh . И все работает
@imngio6674
@imngio6674 2 жыл бұрын
Спасибо тебе добрый человек. Сколько бы я времени убил, чтобы до этого додуматься.
@spitzer4077
@spitzer4077 2 жыл бұрын
При этом у автора видоса всё сработало :)
@ge6lr
@ge6lr 2 жыл бұрын
красава)
@morozalexey
@morozalexey Жыл бұрын
Спасибо!!
@evgenyglizhin5477
@evgenyglizhin5477 Жыл бұрын
Спасибо, выручил!
@ВалерийОжерельев-к6й
@ВалерийОжерельев-к6й Жыл бұрын
Еще один момент для тех кто решил ошибку путем замены миграций местами. Там где мы в модели пишем функцию posts у вас будет ошибка, нет такого столбца, вам нужно указать не post_id а category_id
@АртёмИвасечкин
@АртёмИвасечкин Жыл бұрын
От души бро!
@masterng56
@masterng56 Жыл бұрын
спасибо, очень помогло
@eldaraliev4579
@eldaraliev4579 10 ай бұрын
А как у него сработало?
@Frog-6nm
@Frog-6nm 9 ай бұрын
А я думаю, что за post_id 😂
@joepix241
@joepix241 2 жыл бұрын
Всё заработало только после того, как понял, что 'post_id' в моделях надо заменить на 'category_id', так как при создании таблицы posts нигде не создаем ничего с 'post_id'. Спасибо за урок)
@Technical_Expert
@Technical_Expert 2 жыл бұрын
да, человек учитель от бога, что сказать, сколько он делает таких ошибок просто ужас. Ну хоть что-то и на том спасибо. Самое интересное написал это со словами "часто люди путаются". Видимо после таких объяснений.
@Technical_Expert
@Technical_Expert Жыл бұрын
@Sergei , я прекрасно понимаю, что выдать довольно объемный курс и при этом всё предусмотреть требуется много времени. Но ошибок всё таки много. Одна из самых распространенных - у человека нет заготовок кода, о котором он рассказывает, поэтому часто делает описки, возвращается и ищет где, к примеру, ошибся в имени переменной, или посреди видео может передумать и назвать весь файл совсем по другому. В результате, чтобы повторить за ним уходит куча времени. Также он не рассказывает ни структуру предмета, ни каких либо базовых знаний о функциях. Может оно так в php принято - не знать базу, но для Си++ программиста это выглядит диковато.
@handleftman
@handleftman Жыл бұрын
@@Technical_Expert а зачем с++ идти в пхп, взял готовую cms и в продакшен кинул 😅Но касательно ошибок - рад, что народ тут сразу это подмечает, сам пришёл искать post_id после просмотра видео.
@YeremaAlmaty
@YeremaAlmaty Жыл бұрын
rahmet bro
@serhiilunov4989
@serhiilunov4989 Жыл бұрын
Дякую, чоловіче!
@Noname-y3h9g
@Noname-y3h9g Жыл бұрын
Хорошо что я догадался, что вместо posts_id надо прописать category_id в функции модели)
@ВалерийФроловский
@ВалерийФроловский 3 ай бұрын
также
@DimAlbisoara
@DimAlbisoara Жыл бұрын
If you got the 1005 error at 9:30 after running php artisan migrate:fresh , do so: 1)Drop all your tables 2)Create table categories. 3)Create table posts. do the same steps from the very beggining of the video. I mean, add these lines in your posts migration: $table->unsignedBigInteger('category_id')->nullable(); $table->index('category_id', 'post_category_idx'); $table->foreign('category_id', 'post_category_fk')->on('categories')->references('id'); Execute php artisan migrate:fresh
@KucherUTube
@KucherUTube Жыл бұрын
post_id - нет такого столбца в таблице posts и categories. В моделе Category нужно прописать category_id. Не понятно, как прошло у автора без ошибок. Вообще курс классный! Автор разжевывает очень доходчиво. Небольшие уроки разбиты по темам - это удобно, и слушать приятнно. Спасибо!👍
@ҚазыбекҚойшығара
@ҚазыбекҚойшығара Жыл бұрын
Он чисто авторитетом задавил :)
@armiol
@armiol 9 ай бұрын
Сейчас для подобной связи именно с id не обязательно городить конструкции. Достаточно $table->foreignId('category_id')->constrained('categories'); Laravel сам и индексы создаст и всё, что надо.
@Olegcowboyoleg
@Olegcowboyoleg 8 ай бұрын
Не сработала твоя схема. Опять ошибку выдает (Лара10). Вернулся на авторские рельсы.
@spitzer4077
@spitzer4077 2 жыл бұрын
Всё получилось. особенно если сразу видишь ошибку с post_id, но все эти return $this->hasMany(Post::class,'category_id','id') весьма неочевидны, точечно понимаешь что к чему, а общая картина в голове не складывается. Было бы очень здорово подключать Mindmap-ы для наглядной демонстрации связей переменных и методов. слишком уж иногда кучу всего надо списывать на фиксированную данность.
@rosts_26
@rosts_26 Жыл бұрын
Да, у меня бывает голова кругом едет, в моментах где НУЖНО указывать в множественном числе, а где в ЕДИНИЧНОМ)
@rosts_26
@rosts_26 Жыл бұрын
Мой совет (лично мне помогает): старайся подобные моменты в коде комментировать своими словами, ну например: // Метод возвращающий ВСЕ объекты привязанной таблицы по id public function posts() { // Модель (класс) привязанной таблицы; id на который ссылается привязанная таблица; собственный id return $this->hasMany(Post::class, 'category_id', 'id'); }
@spitzer4077
@spitzer4077 Жыл бұрын
@@rosts_26 это было 9 месяцев тому, давно уже таких нестыковок нет
@АлександрЛисин-е4л
@АлександрЛисин-е4л Жыл бұрын
Со слезами и соплями я все-таки вывел категории, спасибо)👍
@klapperbein6632
@klapperbein6632 Жыл бұрын
Я сейчас таким же лицом сижу, со слезами и соплями. Пойду умоюсь P.S Спасибо великому stackoverflow за ответы без которых я бы самовыпилися
@АлександрЛисин-е4л
@АлександрЛисин-е4л Жыл бұрын
@@klapperbein6632 🤣🤣🤣🤣
@ҚазыбекҚойшығара
@ҚазыбекҚойшығара Жыл бұрын
@@klapperbein6632 есть еще чат гпт с помощью которого можно за 2минуты найти и исправить ошибку, иногда конечно куда дольше, но именно эту ошибку с пост айди и категорий айди, он решил с первого запроса
@ЯрославПахомов-ъ7х
@ЯрославПахомов-ъ7х 2 жыл бұрын
Внешние ключи лучше писать в таблице к которой они привязываются, чтобы быть уверенным, что она уже точно создана и просто указать в названии к какой таблице относиться данный внешний ключ. Можно столкнуться с проблемой "sqlstate[hy000]: general error: 1215 cannot add foreign key constraint". Это происходит из-за того, что таблица к которой идёт привязка ещё не существует. В данном случае в классе CreateCategoriesTable после Schema::create'categories', static function (Blueprint $table) { ... }); прописать создание внешнего ключа: Schema::table('posts', static function(Blueprint $table) { $table->foreign('category_id', 'post_category_fk')->references('id')->on('categories'); }); У меня только после этого миграция произошла полностью.
@mrendsub
@mrendsub 2 жыл бұрын
Я поменял проста имя файла миграции и после того как создана категория пошло посты.
@сергейжиглинский-й8п
@сергейжиглинский-й8п Жыл бұрын
@@mrendsub но это не выход если честно, и мне интересно не приведет ли подход Ярика в следующем к другим ошибкам
@garaevmvadim
@garaevmvadim 2 жыл бұрын
Сделал в точности как в видео, переписал под свои нужды, сделал еще дополнительную страницу по своей нужде, без видео, а просто по своим шаргалкам в тексте Получилось все с 2 раза (просто кое что забыл), уроки просто крайне офигенные и информативные
@sergeyromanov1920
@sergeyromanov1920 2 жыл бұрын
Спасибо автору за урок. Непонятно как у автора миграция прошла, с ключом на таблицу, которая еще не создана. По сути сначала надо сделать категории, потом уже посты. Чтобы это стало я переименовал файлы у себя. Возможно из-за того что у меня 9 ларавел, а у нее по строже с этим. Также еще странно почему fk в модели категории указан post_id -- такого даже нигде нет ... - но все работает (баги 8 версии похоже), 9 уже такое не пускает. надо указать category_id.
@fedya9997
@fedya9997 Жыл бұрын
это не баги. просто (по моему мнению) было несколько дублей, и в разных использовал разны ключи. на 8-й тоже ничего не заводится. люди в комментах подсказали как решить проблему
@mukhtaralmuko2296
@mukhtaralmuko2296 3 жыл бұрын
Здравствуйте! В классе Category при создании метода posts (связь с моделью Post) должен быть внешний ключ category_id. У вас нет внешнего ключа post_id. Это опечатка у Вас?
@laravelcreative
@laravelcreative 3 жыл бұрын
Привет, да опечатка, я вставил его и переключил быстро страницу, в видео это почему-то не отображается. Как раз в тот момент, когда объяснял, что на этом месте должно быть.
@ЕвгенЛандаренко
@ЕвгенЛандаренко 3 жыл бұрын
@@laravelcreative Как Вы сделали это? у меня при рефреше выбивает ошибки при добавлении внешнего ключа ключа
@alexandriv2174
@alexandriv2174 2 жыл бұрын
извините а где это можете кинуть временную ветку -- я вообще не понял наличия в posts - category_id ведь категории это зависимая таблица а посты основная -- значит в таблице категории должно быть post_id а category_id вообще не должно быть
@haminidzinanusubalieva6622
@haminidzinanusubalieva6622 2 жыл бұрын
ага, запорол самый важный момент, тема и так не из простых, а тут самое важное неправильно ввел
@timofeygaltsev8933
@timofeygaltsev8933 2 жыл бұрын
@@alexandriv2174 вы разобрались с этим, я чет не понял, типа все id постов добавлять к категории?)
@vimitali7630
@vimitali7630 3 жыл бұрын
Спасибо, за урок!
@laravelcreative
@laravelcreative 3 жыл бұрын
Благодарю)!
@kramersaw
@kramersaw 3 жыл бұрын
ты вообще лучший! спасибо!
@laravelcreative
@laravelcreative 3 жыл бұрын
Благодарю!)
@ДядяФедяремонтквартир
@ДядяФедяремонтквартир 2 жыл бұрын
Спасибо большое за разъяснения!
@laravelcreative
@laravelcreative 2 жыл бұрын
Благодарю!)
@Кочевник-р2е
@Кочевник-р2е 2 жыл бұрын
Я заметил ошибку у тебя на 16:04, ты не правильно указал - "fk" - там не post_id a category_id нужно указывать. Но я не понимаю как у тебя сработало)) У меня сразу появилась ошибка, только после того как поправил, сработало.
@pashatv2378
@pashatv2378 4 ай бұрын
16:05 пишите category_id а не post_id
@Olegcowboyoleg
@Olegcowboyoleg 8 ай бұрын
Вот думаю: может прерваться на этом видео и всё же посмотреть авторский курс по SQL? ))
@kaemey4330
@kaemey4330 Жыл бұрын
Один к одному, один ко многим, многие ко многим... Так устроена жизнь @Программист-пацанские цитаты
@graceman999
@graceman999 Жыл бұрын
😁
@maleliuk
@maleliuk 2 жыл бұрын
migrate:fresh вылилось в ошибку. Создание миграции create_categories_table после create_posts_table говорит что не может найти таблицу. Пришлось переименовать файл миграции так, чтобы таблица категорий создавалась до момента создания таблицы с постами. Некий Table creation order
@laravelcreative
@laravelcreative 2 жыл бұрын
Да:)
@СултанБакиров-п6ъ
@СултанБакиров-п6ъ 2 жыл бұрын
еслы бы не ты, я бы потерял кучу времени)) Спасибо!
@BookwormYevgen
@BookwormYevgen 2 жыл бұрын
При указании внешнего ключа в миграциях вроде как не обязательно указывать имя ключа, и соответственно в отношениях моделей тоже не нужно, достаточно указать класс. Во всяком случае, у меня работает и так. И не очень понятно для чего тут использовать индексы. Индексы же вроде как могут быть полезны, если в базе записей 100500 штук, и то не факт. Хотя если в целом для демонстрации - то супер. И в миграциях можно сразу было бы показать ограничения. Типа каскадного удаления. А вообще - спасибо за контент!
@MegaZel
@MegaZel 3 жыл бұрын
Добрый день. При добавлении строки {$table->foreign('category_id','post_category_fk')->on('categories')->references('id');} выходит ошибка при фреше. (SQLSTATE[HY000]: General error: 1005 Can't create table `first_project`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `posts` add constraint `post_category_fk` foreign key (`category_id`) references `categories` (`id`))). И не создается таблица categories. Если эту строку закомментировать, то фреш-мигрейт проходит нормально. В чем может быть причина?
@laravelcreative
@laravelcreative 3 жыл бұрын
Добрый день. Потому что идет ссылка на таблицу категорий, которая скорее всего создается после постов. Поэтому такая ошибка. Слева надо переименовать миграции(поменять числа) так, чтобы таблица категорий была выше.
@MegaZel
@MegaZel 3 жыл бұрын
@@laravelcreative Спасибо. Все заработало. В видеоуроке у миграции Categories дата стоит позже, чем в Posts, почему в вас нет такой ошибки?
@laravelcreative
@laravelcreative 3 жыл бұрын
Потому что я не включал движок InnoDB, ты наверно используешь опенсервер)?
@karlengels4956
@karlengels4956 3 жыл бұрын
​@@laravelcreativeааааа, как убрать этот InnoDB
@laravelcreative
@laravelcreative 3 жыл бұрын
это хороший стандарт разработки, лучше не убирать, так как на работе только с ним и работают)
@evgenn787
@evgenn787 2 жыл бұрын
А у меня после фреша ларавель убил таблицу с категориями, так же о ней нет записи в таблице с прошедшими миграциями. и заново не хочет накатывать. Фантастика
@gattelman5823
@gattelman5823 5 ай бұрын
У кого проблема была с кодом 1215 я решил её так, сохранил миграции posts в другой файлик. Создал миграцию сперва для categories все как на видео, а потом создал posts и после чего туда вставил все так же как на видео, миграция прошла успешна. Может я её не "профессионально" сделал, но суть в том, что он дропает таблицы, при создании новых он создает сперва posts а потом уже categories по этому и ошибка, либо же в конце categories просто забить и написать public function down() { Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); } Тоже будет работать
@ridddlewrong
@ridddlewrong Жыл бұрын
почему для категорий hasMany a не belongsToMany? В плане логики логично, что если посты принадлежат категории, то категория имеет посты, но в чем систематическая разница между двумя методами? И ещё, чисто по логике belongsToMany тоже мог бы подойти, ведь одна категория тоже принадлежит многим постам.
@myyyp1
@myyyp1 2 жыл бұрын
1. Правильно ли я понимаю, что на 16:02 вместо 'post_id' должен быть указан 'category_id'? 2. И вроде как laravel сам может определить внешний ключ и указывать foreign_key и local_key не обязательно?
@laravelcreative
@laravelcreative 2 жыл бұрын
1. Нет, в связке только post_id между этими таблицами:) 2. Да, если делать по конвенции ларавел:)
@ВячеславТараканов-б9и
@ВячеславТараканов-б9и 2 жыл бұрын
@@laravelcreative Дак а откуда берется рost_id? Вы объясняете, говорите вот, заходим сюда, видим что у нас здесь есть есть форей кей category_id, его сюда и вставляем. Что-то запутался.
@repkuc
@repkuc Жыл бұрын
сделал migrate:fresh и табоица posts пропала. и никак не вернуть. в чем проблема ?
@dimanamumchak5370
@dimanamumchak5370 3 жыл бұрын
Отличный урок.!!!
@laravelcreative
@laravelcreative 3 жыл бұрын
Спасибо!
@Shico_
@Shico_ 2 жыл бұрын
Один ко многим на примере двух таблиц - это конечно интересно, но малоинформативно... другое дело, когда у тебя каскад этих таблиц, и каждая следующая подчинена предыдущей. Я понимаю, что такая структура БД сложна, но только так можно привести БД хотя бы к 3 нормальной форме.
@ridddlewrong
@ridddlewrong Жыл бұрын
Вы кажетесь человеком разбирающимся, возможно вы знаете почему для категорий hasMany a не belongsToMany? В плане логики логично, что если посты принадлежат категории, то категория имеет посты, но в чем систематическая разница между двумя методами? И ещё, чисто по логике belongsToMany тоже мог бы подойти, ведь одна категория тоже принадлежит многим постам, тогда тем более почему пишем иное.
@evgenn787
@evgenn787 2 жыл бұрын
Спасибо большое
@Olegcowboyoleg
@Olegcowboyoleg 8 ай бұрын
Вопрос ещё вот какой: а если мы просто создаем две таблицы (из миграций), но сами потом руками в MySQL делаем привязку сторонних ключей, будет ли работать? Или надо строго в миграции указать - есть связь таблиц?.
@alexandr-v
@alexandr-v 6 ай бұрын
Работать будет, но если где-то еще через миграции поднять сайт, то надо будет опять через бд править.
@abdulloakramov7941
@abdulloakramov7941 2 жыл бұрын
pls help me General error: 1824 Failed to open the referenced table 'categories' (SQL: alter table `posts` add constraint `posts_category_id_foreign` foreig n key (`category_id`) references `categories` (`id`)) такие ошибки постоянно
@imngio6674
@imngio6674 2 жыл бұрын
Ты нашел решение проблемы ?
@novikovez
@novikovez Жыл бұрын
Уроки супер. Очень хотелось бы понять, как будет происходить вывод Названия категории в цикле когда выводим записи, на 100 записей будет 100 запросов в базу?
@Lotpite
@Lotpite 10 ай бұрын
даааа, с fk явные нестыковки
@aleksandrpushnin2244
@aleksandrpushnin2244 2 жыл бұрын
Ошибка SQLSTATE[42S22]: Column not found: 1054 Unknown column 'posts.post_id' in 'where clause' как было сказано ниже изменил дату у миграции категорий что бы она было выше чем миграция с постами, не помогло а вот если в модели заменить post_id на category_id то все работает, это как вообще ?))
@sezamiti
@sezamiti Жыл бұрын
Спасибо друг,)
@SR-gc8yk
@SR-gc8yk Жыл бұрын
Спасибо
@laravelcreative
@laravelcreative Жыл бұрын
Благодарю!)
@andrewlevitsky6270
@andrewlevitsky6270 Жыл бұрын
Такой вопрос, а почему вы не заходите в DataBase непосредственно в самом phpstorm ? Она ж так удобно справа во вкладке интегрированна )
@НиколайСоловьев-т4ц
@НиколайСоловьев-т4ц 2 жыл бұрын
16:13 при запуске выдает ошибку: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'posts.post_id' in 'where clause' (SQL: select * from `posts` where `posts`.`post_id` = 1 and `posts`.`post_id` is not null and `posts`.`deleted_at` is null)
@laravelcreative
@laravelcreative 2 жыл бұрын
Ошибка, нет колонки в таблице posts, которая называлась бы post_id. Видимо, что то в миграциях напутал, так как зачем таблице пост иметь колонку post_id)
@СултанБакиров-п6ъ
@СултанБакиров-п6ъ 2 жыл бұрын
в модели Post foreignkey напиши 'category_id'
@каучукБутадиеновый
@каучукБутадиеновый 2 жыл бұрын
может быть в модели Category в методе hasMany вместо 'post_id' написать 'category_id' ? Т.к. если идти по сути видео, то как раз на моменте 15:50 задевается тема "что же подставлять в foreignKey", и идет ссылка на foreign в миграции, где название колонки - 'categoty_id'. Так же если судить по ошибке запроса ... where `posts`.`post_id` = 1 ... , и учитывая, что мы ищем как раз id категории (то есть categoty_id), получается, что просто нужно заменить 'post_id' на 'category_id'. Но все мы люди, что уж там.
@SR-gc8yk
@SR-gc8yk Жыл бұрын
как я могу связатся с тобой дорогой автор у меня один проблема не могу решить
@laravelcreative
@laravelcreative Жыл бұрын
laravelcreative@gmail.com
@alexandriv2174
@alexandriv2174 2 жыл бұрын
снимите пожалуйста видео про CRUD с использованием отношений - а то не понятно как при заполнении поста будет заполнятся category_id
@laravelcreative
@laravelcreative 2 жыл бұрын
Все впереди
@cshr3225
@cshr3225 Жыл бұрын
Это вроде связаны с LEFT JOIN?
@PumaKuma-vx6yf
@PumaKuma-vx6yf 2 жыл бұрын
Здравствуйте, я использую open server , мой код абсолютно индетичен моему , когда я запускаю миграцию с категориями то у меня выходит такая ошибка Laravel Migrate: "Column Already Exists" 1060 Duplicate Column Name Подскажите пожалуйста, перыл везде и перепробовал все
@ekaterinasimakova6748
@ekaterinasimakova6748 3 жыл бұрын
Добрый день! почему выдается такая ошибка , когда я проверяю категорию у поста? Trying to get property 'category' of non-object
@laravelcreative
@laravelcreative 3 жыл бұрын
Привет!) Потому что ты пытаешься взять category у объекта, который на самом деле не объект. Если у поста, значит этот пост ноль по каким-то причинам:)
@ekaterinasimakova6748
@ekaterinasimakova6748 3 жыл бұрын
@@laravelcreative я разобралась. Я пыталась найти пост по id , которого у меня нет. У меня посты начинаются с 4, а я пыталась искать как у вас в видео, с 1)))))
@ekaterinasimakova6748
@ekaterinasimakova6748 3 жыл бұрын
@@laravelcreative спасибо большое за этот курс!
@laravelcreative
@laravelcreative 3 жыл бұрын
Ахаха, да бывает, ничего) Спасибо!) Благодарю!)
@sharpsss7666
@sharpsss7666 Жыл бұрын
13:15 Undefined variable $category вот решение пацаны: $categories = Category::find(1); $posts = Post::where('category_id',$categories->id)->get(); dd($posts);
@laravelcreative
@laravelcreative Жыл бұрын
Благодарю!)
@alexandr9900
@alexandr9900 2 жыл бұрын
камент для продвижения
@laravelcreative
@laravelcreative 2 жыл бұрын
Благодарю!)
@СергейПрозоров-ч5к
@СергейПрозоров-ч5к 2 жыл бұрын
Не понятно как мы можем связывать посты с категориями через foreignId когда миграция categories ниже миграции posts
@СергейПрозоров-ч5к
@СергейПрозоров-ч5к 2 жыл бұрын
Переименовал дату у categories теперь все работает.
@АлексейБогомолов-з3ц
@АлексейБогомолов-з3ц 2 жыл бұрын
Я тоже на этом моменте застрял. Непонятно как на видео fresh без ошибок прошел?
@alexgud6467
@alexgud6467 3 жыл бұрын
в моем проекте как раз-таки будут отношения 1 к 1)) там будет таблица пользователей, и от них будут образованы таблицы: студент, преподаватель, работник, т.е. у каждого пользователя будет своя роль и возможности на сайте. возможно ли отойти от отношения 1 к 1, реализовав как-то по-другому? и спасибо вам за ваши уроки!
@laravelcreative
@laravelcreative 3 жыл бұрын
Если нужно, можно вместо hasMany, использовать hasOne, и таким образом будет реализовать отношение 1 к 1:)
@alexgud6467
@alexgud6467 3 жыл бұрын
@@laravelcreative а как вы считаете, нормально ли использовать данное отношение к в случае, что я указал? Ну то есть таблицы «студенты», «преподаватели» и т.д. будут иметь связь с таблицей «пользователи» 1 к 1. Может есть другой способ разделять роли?
@laravelcreative
@laravelcreative 3 жыл бұрын
Мне кажется некорректно) Это получается у тебя может быть много студентов/преподов, но каждый пользователь может иметь одну роль. Получается это один ко многим отношения) Иначе тебе придется множить в таблице ролей много дубляжей "студент" и "преподаватель"
@alexgud6467
@alexgud6467 3 жыл бұрын
@@laravelcreative честно говоря немного не понял вас) вы имеете в виду сделать отношение один ко многому от пользователя к таблицам студентов и преподов? Но тогда ссылка на пользователя одного человека может быть привязана к другому человеку.
@alexgud6467
@alexgud6467 3 жыл бұрын
@@laravelcreative идея короче была какая: в таблице пользователя хранить ФИО, логин, пароль, что есть у каждого пользователя. А в таблицах студента и препода ссылки на этого пользователя и доп уникальные поля каждой из ролей. (В итоге будет один пользователь- одна роль)
@alexandriv2174
@alexandriv2174 2 жыл бұрын
извините а вы не сказали обязательно ли прописывать индексы и имя внешнему ключу -- в доках и других примерах этого нет -- а так же не показали пример использования индексов
@laravelcreative
@laravelcreative 2 жыл бұрын
Это стандарт разработки, где-то ему придерживаются, где-то нет. Зависит от компании и команды.
@kyutinen
@kyutinen 3 жыл бұрын
Здравствуйте! Для миграции Posts (7 мин. 50 сек) делаем настройки [$table->index(...) и $table->foreign(...)] вопрос: В модели Category (15 мин. 50 сек) создаем метод posts(), где для hasMany указываем внешний ключ - все работает Но если в миграции пропустить эти настройки [$table->index(...) и $table->foreign(...)] - метод posts() продолжает работать Для чего явно указываем эти пар-ры [$table->index(...) и $table->foreign(...)] в миграции?
@laravelcreative
@laravelcreative 3 жыл бұрын
Это обеспечивает со стороны БД защиту сохранности данных, чтобы не было дубляжей или данных, которые ссылаются на допустим посты на категорию, которой уже нет. А то, что прописывается в модели - это на уровне php связь, грубо говоря. Поэтому, на реальных проектах, при указании ключей. если будет операция, допустим удаления категории, на которую ссылаются посты, то БД запретит это делать(если конечно нет каких-то прописанные сценариев, как поступать, если такая операция совершается, но это уже другая история)
@kyutinen
@kyutinen 3 жыл бұрын
@@laravelcreative спасибо!!
@joeyjordison8552
@joeyjordison8552 2 жыл бұрын
не создалась таблица категорий в базе
@foster6515
@foster6515 2 жыл бұрын
как фиксил? Тот же прикол поймал
@alexandriv2174
@alexandriv2174 2 жыл бұрын
я вообще не понял наличия в posts - category_id ведь категории это зависимая таблица а посты основная -- значит в таблице категории должно быть post_id а category_id вообще не должно быть
@laravelcreative
@laravelcreative 2 жыл бұрын
Опечатка)
@Mr.Capone-
@Mr.Capone- 3 жыл бұрын
14:30 что значит use HasFactory? а так же use SoftDeletes? на 16:33
@laravelcreative
@laravelcreative 3 жыл бұрын
Это значит используется трейт фабрики, до 8 версии реализация была другая, и в моделях не было этого use. О фабриках рассказывается дальше)
@eldarkk4566
@eldarkk4566 Жыл бұрын
15:50 это ошибка ?
@aj-alex
@aj-alex 2 жыл бұрын
А у меня такая ошибка при миграции (таблица posts): SQLSTATE[HY000]: General error: 3780 Referencing column 'category_id' and referenced column 'id' in foreign key constraint 'post_category_fk' are incompatible. (SQL: alter table `posts` add constraint `post_category_fk` foreign key (`category_id`) references `categories` (`id`)) Роллбекил все до нуля Мигрировал и рефрешил Миграцию категорий переставил до posts Ничего не помогает Все написано верно, как в уроке Если у кого-то была такая же ошибка, просьба поделиться решением. Спасибо!
@aj-alex
@aj-alex 2 жыл бұрын
Разобрался в общем. Дело в том, что при добавлении колонки category_id в миграции мы указывали формат unsignedInteger: $table->unsignedBigInteger('category_id')->nullable(); А для создания foreign key необходимо соответствие форматов, т.е. он должен быть точно такой же, как у айдишника таблицы категорий, а он создался в формате BIGINT. В общем, поменял формат на unsignedBigInteger и заработало, ы)
@thunderrise8263
@thunderrise8263 2 жыл бұрын
@@aj-alex здравствуйте а что вы поменяли ? можете подробнее написать
@aj-alex
@aj-alex 2 жыл бұрын
@@thunderrise8263 unsignedInteger на unsignedBigInteger, т.к. такой формат у айдишника
@МахмудКосимов-з9и
@МахмудКосимов-з9и 2 жыл бұрын
@@aj-alex SQLSTATE[HY000]: General error: 1005 Can't create table `first_project`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `posts` add constraint `post_category_fk` foreign key (`category_id`) references `categories` (`id`))
@Floyd8682
@Floyd8682 2 жыл бұрын
Может кто сталкивался с подобной ошибкой? SQLSTATE[HY000]: General error: 1005 Can't create table `laravel_project`.`works` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `works` add constraint `work_category_fk` foreign key (`category_id`) references `categories` (`id`))
@Floyd8682
@Floyd8682 2 жыл бұрын
Я понял в чем ошибка, из за того что миграция categories создана после миграции works(аналог posts) и когда я запускаю artisan migrate:fresh он доходит до миграции works пытается там установить связь с таблицей categories, но она еще не создана и прерывает дальнейшее выполнение. Если сначала создать categories, а потом works то все работает, но это неудобно, мне нужно переделывать весь проект, может есть какой то способ это исправить? у автора artisan migrate:fresh работает хотя миграция posts у него стоит до categories.
@myyyp1
@myyyp1 2 жыл бұрын
09:56 "кец"))))))))
@laravelcreative
@laravelcreative 2 жыл бұрын
Благодарю!)
@ramziddinabdumominov654
@ramziddinabdumominov654 2 жыл бұрын
ya tak zdelal ya sozdal v baze categories u menya toje ne rabotala kogda delal migrate:fresh ya zdelal 1. migrate:fresh 2. sozdal tablitsu v database categories 3. v modele Category ya dal category_id a ne post_id no umenya tak srabotala yesli uvas ne poluchayetsa pobrobuyte tak ne znayu eto pravilniy xod no drugova vixoda ya ne nashol
@world_magics
@world_magics 2 жыл бұрын
Illuminate\Database\QueryException SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `posts` add constraint `posts_category_id_foreign` foreign key (`category_id`) references `categories` (`id`) on delete cascade)
@Mr.Capone-
@Mr.Capone- 2 жыл бұрын
такая же ошибка
@georgegeorgin6286
@georgegeorgin6286 2 жыл бұрын
[Laravel 9] Для тех у кого не создаётся foreign key в БД (Самое интересное artisan молчит как партизан): Ищем файл /config/database.php Меняем 'engine' => null, на 'engine' => 'InnoDB', Теперь laravel сможет создать ключ. Может вылезти ошибка типа этой: SQLSTATE[HY000]: General error: 1005 Can't create table `first_project`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `posts` add constraint `posts_category_id_foreign` foreign key (`category_id`) references `categories` (`id`)) Нужно либо создать миграцию после миграции с таблицей "categories", либо (как я поступил) создать новую миграцию и в ней добавить index и foreign key: php artisan make:migration add_foreign_key_to_posts_table public function up() { Schema::table('posts', function (Blueprint $table) { $table->index('category_id', 'post_category_idx'); $table->foreign('category_id', 'post_category_fk')->on('categories')->references('id'); }); } public function down() { Schema::table('posts', function (Blueprint $table) { $table->dropForeign('post_category_fk'); $table->dropIndex('post_category_idx'); }); }
@jasonbourne4015
@jasonbourne4015 2 жыл бұрын
Здравствуйте! У вас метод posts() возвращает коллекцию постов (items), привязанных к заданной категории. Сейчас думаю, то-ли я ошибся, то-ли laravel обновил hasMany, поскольку у меня написан точь-в-точь такой же код, как у вас, но выводится не коллекция, а вот это Illuminate\Database\Eloquent\Relations\HasMany {#1022 ▼ #foreignKey: "posts.category_id" #localKey: "id" #query: Illuminate\Database\Eloquent\Builder {#1089 ▶} #parent: App\Models\Category {#1088 ▶} #related: App\Models\Post {#293 ▶} }
@laravelcreative
@laravelcreative 2 жыл бұрын
Возможно тебе в конце надо добавить ->get() ? А если ты хочешь у категории брать посты, то ->posts, если по релейшену, то бишь без скобочек. Скобки - это запрос в бд
@jasonbourne4015
@jasonbourne4015 2 жыл бұрын
Исправил, продолжаю обучение по вашим курсам! Спасибо вам большое за ваши труды и за то, что отвечаете зрителям:)
@laravelcreative
@laravelcreative 2 жыл бұрын
Пожалуйста!) Успехов)!
Human vs Jet Engine
00:19
MrBeast
Рет қаралды 156 МЛН
啊?就这么水灵灵的穿上了?
00:18
一航1
Рет қаралды 94 МЛН
Smart Sigma Kid #funny #sigma
00:14
CRAZY GREAPA
Рет қаралды 83 МЛН
Отношение belongsToMany. Гайд по отношениям в Laravel
30:37
Просто о Laravel. CutCode
Рет қаралды 3,4 М.
Laravel 10. Связи. Один-к-одному (One to One)
27:07
Андрей Кудлай
Рет қаралды 938
#3. Миграции и отношения - PHP Laravel
1:36:26
IT-ЛЭТИ
Рет қаралды 2,5 М.
Laravel. Сервисы, контракты и внедрение зависимостей
29:18
Lectoria. Обучение веб-разработке.
Рет қаралды 22 М.
Human vs Jet Engine
00:19
MrBeast
Рет қаралды 156 МЛН