2013-05-20 5 views
0

Я хочу иметь отношения «многие-ко-многим» в «Красноречии». У меня есть 3 таблицыLaravel отношения «многие-ко-многим» с «Красноречивым»?

  • Client
  • Активы
  • Продукты

Каждый клиент может иметь много активов. У каждого актива может быть много продуктов.

На данный момент, они связаны с 2-мя промежуточными таблицами

  • client_asset [идентификатор | client_id | ASSET_ID]
  • asset_products [идентификатор | ASSET_ID | product_id]

Я думаю, что я буду теперь необходимо подключить эти 2 промежуточных стола вместе с другой промежуточной таблицей

  • clie nt_asset_asset_products [id | client_asset_id | asset_products_id]

Но разве это разрешено в «Красноречии»? Является ли это возможным? и это хорошая практика?

Как подключить 2 промежуточных стола к новой промежуточной таблице?

Если вы представляете, что это клиент, у которого много автобусов, и у каждого автобуса может быть много пассажиров ... это то, что мне нужно.

Благодарим за помощь/информацию.

ответ

0

Все нормально. ORM определяет, какие продукты принадлежит клиенту, и он уже имеет всю эту информацию в БД. При правильно названных методов отношений вы могли бы использовать жадную загрузку, как это ...

$client = Client::with(array('assets', 'assets.products'))->where_id(9000)->first(); 

// $client->assets array of assets 
// $client->assets[0]->products array of products 

Вы также можете получить плоский список продуктов, делая что-то вроде

$products = Product::join('asset_products', 'asset_product.products.id', '=', 'products.id') 
    ->join('client_asset', 'client_asset.assets_id', '=', 'asset_products.assets_id') 
    ->where('client_asset.client_id', '=', 9000) 
    ->get('products.*'); 

Если бы это было что-то я был часто я добавляю его как метод для модели клиента.

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