0

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

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

4

1 回答 1

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

于 2013-03-12T05:47:28.807 回答