2014-01-29 39 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