Создание полиморфных много ко многим отношений в Laravel 4
Им нужно создать полиморфный отношения многие-ко-многим в laravel 4 и я не совсем уверен, возможно ли это.
Например
TagModel
- id
- title
- slug
PostModel
- id
- title
- slug
- content
PageModel
- id
- title
- slug
- content
Это, конечно, будет иметь tags_tagable сводную таблицу как таковую
tags_tagable
- tag_id
- tagable_id
- tagable_type
2 ответов:
Полиморфные отношения многие ко многим будут выпущены в Laravel 4.1 в ноябре.
Вы можете попробовать переключиться на ветку 4.1 и использовать их сейчас, если хотите. Но на данном этапе я не видел никакой конкретной документации по их использованию - только твит от Тейлора.
Laravel 4.1 теперь поддерживает полиморфные отношения "многие ко многим".
Пример ниже показывает, как я реализовал обмен фотографиями как с продуктами, так и с постами.
Схема БД
Фотографии
id integer filename string alt string
Photoable
id integer photoable_id integer photoable_type string
Модели
Фотомодель
class Photo extends Eloquent { public function products(){ return $this->morphedByMany('Product', 'photoable'); } public function posts(){ return $this->morphedByMany('Post', 'photoable'); } }
Модель Продукта
class Product extends Eloquent { public function photos(){ return $this->morphToMany('Photo', 'photoable'); } }
Постмодель
class Post extends Eloquent { public function photos(){ return $this->morphToMany('Photo', 'photoable'); } }
С помощью вышеизложенного я могу получить доступ ко всем фотографиям, которые прикреплены к продукту следующим образом:
$product = Product::find($id); $productPhotos = $product->photos()->all();
Я также могу перебирать для отображения всех фотографий в виде любой коллекции моделей.
foreach ($productPhotos as $photo) { // Do stuff with $photo }
Все вышесказанное может быть воспроизведено почти точно в соответствии с вашими требованиями с помощью нескольких изменений названия модели.