2013-12-17 3 views
1

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

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

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

Но я не знаю, как это сделать или если это возможно?

Вот мои таблицы:

user_requirements
- ID
- user_id
- requireable_id
- requireable_type

account_requirement
- ID
- согл ount_id
- requirement_id

role_requirement
- ID
- ROLE_ID
- requirement_id

trip_requirement
- ID
- account_id
- requirement_id

country_requirement
- идентификатор
- account_id
- requirement_id

+0

Вот аналогичный пост: [Laravel-manytomany-кратно] [1] Не могли бы вы ответить на этот пост. [1]: http://stackoverflow.com/questions/21966465/laravel-manytomany-multiple – CRIMUVI

ответ

1

Laravel 4.1 теперь поддерживает полиморфные отношения многих-многих.

Пример ниже показывает, как я реализовал совместное использование фотографий с обоими товарами и сообщениями.

DB схемы

фото

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(); 

I также может перебирать все фотографии как любую коллекцию o f моделей.

foreach ($productPhotos as $photo) 
{ 
    // Do stuff with $photo 
} 

Вышеуказанные могут быть воспроизведены почти точно в соответствии с вашими требованиями.

  1. создать requirements таблицу
  2. создать requireable таблицу
  3. В Requirement модели, декларировать все отношения morphedByMany
  4. В стране, поездки, роли и т.д. объявить morphToMany отношения

нб - Я набрал это бесплатно в S/O без редактора кода, поэтому, вероятно, будет опечатка, ошибка или два, но концепция остается той же.

0

A polymorphic relation in Laravel 4 предназначен для одной модели, ассоциаций, поэтому вы не можете добиться того, что вы пытаетесь построить с помощью этого метода. Это связано с тем, что сводная таблица не представляет собой Модель.

Смежные вопросы