Создание полиморфных много ко многим отношений в 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
475   2  

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
}

Все вышесказанное может быть воспроизведено почти точно в соответствии с вашими требованиями с помощью нескольких изменений названия модели.

    Ничего не найдено.

Добавить ответ:
Отменить.