Я создал миграции, а также их отношения. Похоже, я использую полиморфные отношения, потому что в одной таблице у меня может быть значение одной модели, или у меня может быть значение другой модели. как вы можете догадаться, у меня есть что-то вроде этого
ID Mappable_type Mappable_id значение
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? или что если я изменил расположение самой модели в моем проекте кода?
Каков наилучший способ не допускать подобных ошибок к тому времени, когда мой проект достигнет огромного количества пользователей?
Задача ещё не решена.
Других решений пока нет …