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);

Вот и все!