Целесообразно ли использовать полиморфные отношения с объединениями? - PullRequest
0 голосов
/ 07 ноября 2018

Я создал миграции, а также их отношения. похоже, я использую полиморфные отношения, потому что в одной таблице у меня может быть значение одной модели или у меня может быть значение другой модели. как вы можете догадаться, у меня есть что-то вроде этого

ID Mappable_type Mappable_id value

Mappable_type может быть одной или несколькими другими моделями. mappable_id будет соответствующим идентификатором из этой модели. Мне это нужно, потому что я создаю динамический конструктор форм, и именно так я спроектировал базу данных.

Теперь мне нужно собрать несколько записей из 5 таблиц вместе, поэтому я должен использовать соединения. таблица, где у меня есть mappable_type, находится на третьем месте из этих 5 соединений. Что мне теперь делать, чтобы получать только данные из этих 5 объединений, которые имеют определенный тип модели в этой таблице морфов? Сейчас я делаю что-то подобное:

$final = Dynamic::join('dynamic_properties_values','dynamic_properties_values.dynamic_id','=','dynamic.id')
                    ->join('dynamic_properties_mapping','dynamic_properties_mapping.id','=','dynamic_properties_values.mapping_id')
                    ->where('dynamic_properties_mapping.mappable_type','=','App\Driver')
                    ->get();

Как видите, я написал что-то вроде

"App \ Driver"

. Неважно, что я написал это вручную или сохранил в переменную и чем использовал это здесь. Что меня действительно беспокоит, так это то, что, скажем, когда я вставлял данные в эти морфируемые таблицы, модель сохранялась как «App \ Driver». Что делать, если я ошибаюсь и при получении с объединениями я пишу что-то вроде App \ Http \ Driver? или что, если я изменил расположение самой модели в своем проекте кода?

Как лучше всего не допускать подобных ошибок к тому времени, когда мой проект достигнет огромного количества пользователей?

...