2013-03-12 79 views
0

我一直在尝试使用Eloquent作为我正在制作的应用程序(被Codeigniter阻止),但我无法让它工作。在Laravel的Eloquent ORM中使用查找表:不是唯一的表别名?

我有3个表:

  • users
  • departments
  • department_members(这是查找表)

department_members具有3个字段:ID,部门标识和USER_ID。我所有的桌子都有自己的模特。当我尝试使用ORM得到一个用户(User::find(1)->member()->first())我得到的部门这个错误:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'users'

虽然我知道是什么问题,我不知道如何解决它,因为它都是由ORM生成的。

的车型:

  • 会员模型

    class Member extends Eloquent { 
        public static $table  = 'department_members'; 
        public static $timestamps = false; 
    
        public function user() { 
         return $this->has_many_and_belongs_to('User', 'users'); 
        } 
    } 
    
  • 用户模型

    class User extends Eloquent { 
        public static $timestamps = false; 
    
        public function member() { 
         return $this->has_many_and_belongs_to('Member', 'department_members'); 
        } 
    } 
    
  • 系车型

    class Department extends Eloquent { 
        public function member() { 
         return $this->has_many_and_belongs_to('Member', 'department_members'); 
        } 
    } 
    

这些列具有相应的名称:id为PK,以及附加了_id的相应名称。

如果需要更多信息,我会很乐意提供帮助。

回答

1

您错误地设置了您的关系。你不需要有一个成员模型 - 只需要一个用户和部门模型。

像这样:

# in User 
public function departments() { 
    return $this->has_many_and_belongs_to('Department', 'department_members'); 
} 

# in Department 
public function users() { 
    return $this->has_many_and_belongs_to('User', 'department_members'); 
} 

没有必要的额外的模型。另外,您可能想要阅读这里:http://laravel.com/docs/database/eloquent#many-to-many - 特别注意的是数据透视表,以防您想在关系的连接表方面做一些额外的工作。

+0

正确 - 'department_members'是我的数据透视表,Eloquent使用它生成正确的查询,而实际上并没有声明它(除了第二个参数)。我只需要定义起始表和结束表,而不是中间表。谢谢! – AeroCross 2013-03-12 20:46:41

相关问题