2014-01-29 207 views
0

我有一個多對多的關係來建立不返回結果,雖然有相關的數據。Laravel多對多關係

我在想什麼?

MySQL的架構:

entities 
    - id 

services 
    - id 

entity_service 
    - entity_id 
    - service_id 

相關型號:

class Entity extends Eloquent implements UserInterface, RemindableInterface 
{ 
    // ... 
    public function services() 
    { 
     return $this->belongsToMany('Service'); 
    } 
} 

class Service extends Eloquent 
{ 
    // ... 
    public function entities() 
    { 
     return $this->belongsToMany('Entity'); 
    } 
} 

控制器/查看

$entity       = Entity::findOrFail($id); 
$locals['entity']    = $entity; // I can see all values available here 
$locals['entity_services']  = $entity->services(); // I can't see any values here 

@foreach ($entity_services as $service) 
{{$service->id}} 
@endforeach 
+1

如果您使用'$ this-> belongsToMany('Service','entity_service','entity_id','service_id');'? – Wrikken

+0

沒有明顯的變化。 – Donnie

+0

'Entity :: findOrFail($ id)'_does_ work,只是爲了確保? – Wrikken

回答

0

我的問題是services表中的id是唯一的VARCHAR而不是標準的自動遞增INT。修復並添加一個name字段解決了問題。

1

Laravel根據模型名稱對您的數據透視表做了一些假設。它並不總是對的,我懷疑「實體」和「entity_service」就是這種情況。手動指定透視表和鍵:

class Entity extends Eloquent implements UserInterface, RemindableInterface 
{ 
    // ... 

    public function services() 
    { 
     return $this->belongsToMany('Service', 'entity_service', 'entity_id', 'service_id'); 
    } 
} 

class Service extends Eloquent 
{ 
    // ... 
    public function entities() 
    { 
     return $this->belongsToMany('Entity', 'entity_service', 'entity_id', 'service_id'); 
    } 
} 

嘗試急切裝載數據:

Entity::with('services')->get(); 

的Laravel文檔詳細@http://laravel.com/docs/eloquent#relationships覆蓋此。

+0

我已經實現了這種方法,包括急切的加載,但現在沒有迴應。 '$ entity = Entity :: with('services') - > get(); dd($ entity);'不輸出任何內容。 – Donnie

+0

想到可能相關的事情。 '$ service-> id'不是數字。它是一個'VARCHAR',因爲它只是一個唯一的值列表。那可能是爲什麼它沒有按預期工作? – Donnie