Laravel и полиморфизм (пример БД)
Длинная статья, но она будет вам полезна, если вы заинтересованы в улучшении своих навыков проектирования баз данных.
Полиморфизм — одна из самых важных тем в ООП.
Итак, что такое отношение морфинга в Laravel?
Но как мы можем применить эту концепцию к нашей базе данных в нашем проекте?
Просто, в качестве простого примера полиморфизма, вы создаете класс под названием «Форма», который имеет функцию с именем «рисовать».
И два класса:
«Круг» расширяет «Форму»
«Квадрат» расширяет «Форму»
В обоих случаях мы переопределяем функцию «рисования».
$a = новый круг();
$b = новый квадрат();
$a.draw(); // Он нарисует круг.
$b.draw(); // Он нарисует квадрат.
Теперь, как мы можем применить это к нашей базе данных?
В Laravel, например, если вы посмотрите документацию, вы найдете тип отношений, называемый «морфинг».
Просто в простом примере из Laravel у нас есть несколько таблиц, содержащих изображения. Вместо создания столбца «изображение» в каждой таблице мы создаем таблицу «морфов» для изображений.
Итак, как это работает?
php
Schema::create(‘media’, function (Blueprint $table) { $table-›text(‘image’); $table-›morphs(‘imageable’); });
Столбец «imageable» создаст в базе данных два столбца: «imageable_id» и «imageable_type». В первом столбце хранится идентификатор связанной модели, а во втором столбце хранится имя класса.
Вот как отношения выглядят в моделях для сущностей, которые мы хотим связать с изображениями:
публичная функция media() { return $this-›morphMany(Media::class, ‘imageable’); }
И вот как мы это храним:
$media-›imageable_id = $ModelObject-›id; $media-›imageable_type = get_class($ModelObject);
Вот и все!