2013-03-12 2 views
0

Я пытался использовать Eloquent для приложения, которое я делаю (будучи защищенным от Codeigniter), но я не могу заставить его работать.Использование справочной таблицы с ярким ORM Laravel: не уникальный псевдоним таблицы?

У меня есть 3 таблицы:

  • users
  • departments
  • department_members (это таблица поиска)

department_members имеет 3 поля: идентификатор, department_id и user_id. Все мои таблицы имеют свои собственные модели. Когда я пытаюсь использовать ОРМ, чтобы получить отдел для пользователя (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