Итак, я выясняю, как создать присоединяемый объект с каркасом laravel, так как они реализуют полиморфные отношения.
Мой сценарий следующий: у меня есть один объект, который мы назовем Attachable-Object. Вы можете прикрепить к нему различные виды объектов, которые мы будем называть Attachement-Object. Например, вы сохранили изображение и хотите прикрепить его к различным рекламным объявлениям, профилям, блогам и т. Д.
Так что в теории должна быть таблица со следующей структурой:
id | attachable_id | attachable_type | attachment_id | attachable_type | ...
1 | 1 | advertisement | 1 | image | ...
1 | 2 | profile | 1 | image | ...
1 | 1 | advertisement | 3 | video | ...
Эта структура очень расширяемая, поскольку вам не нужно добавлять дополнительные столбцы в другие таблицы или создавать таблицы для отношений «многие ко многим».
Первый вопрос: Является ли эта структура хорошей идеей, если вы хотите добавить вложения к объекту, тип которого вы не знаете?
В настоящее время мне интересно, как реализовать это с полиморфными отношениями из каркаса laravel. Я знаю, что можно использовать его для полиморфных отношений один-к-одному или многие-ко-многим. Но все, что я могу найти по этому поводу, это сценарии с тегами или комментариями, где вы точно указываете присоединяемый объект.
Второй вопрос: Как реализовать это в стиле laravel с полиморфными отношениями? Это вообще возможно?
Я предполагаю, что должна быть Attachment-Model, которая будет реализовывать оба способа следующим образом:
// Attachment Class
...
public function attachable(){
return $this->morphTo();
}
public function attachment(){
return $this->morphTo();
}
...// Advertisement Class
...
public function attachement(){
return $this->morphOne('App\Attachment', 'attachment');
}
...
// Image Class
...
public function attachable(){
return $this->morphOne('App\Attachment', 'attachable');
}
...
Но как правильно это сделать? Надеюсь, кто-то реализовал нечто подобное и может помочь мне в этом.
Задача ещё не решена.
Других решений пока нет …