使用Laravel的Eloquent ORM查找表:不是唯一的表别名?

时间:2013-03-12 04:30:22

标签: php laravel eloquent

我一直在尝试将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的相应名称。

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

1 个答案:

答案 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 - 特别注意的是数据透视表,以防您想要在关系的连接表方面做一些额外的工作。