我一直在尝试将Eloquent用于我正在制作的应用程序(从Codeigniter获得提升),但我无法让它工作。
我有3张桌子:
users
departments
department_members
(这是查找表) department_members
有3个字段:id,department_id和user_id。我的所有桌子都有自己的模型。当我尝试使用ORM来获取用户的部门(User::find(1)->member()->first()
)时,我得到的就是这个错误:
SQLSTATE [42000]:语法错误或访问冲突:1066不唯一的表/别名:'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的相应名称。
如果需要更多信息,我很乐意提供帮助。
答案 0 :(得分: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 - 特别注意的是数据透视表,以防您想要在关系的连接表方面做一些额外的工作。