Laravel 3 Отношение «многие ко многим» не связывает запрос

Я работаю над документацией отношений «многие ко многим» и столкнулся с своего рода кирпичной стеной. Я пытаюсь использовать существующую схему базы данных и обернуть вокруг нее Laravel/Eloquent, что требует обучения Eloquent различным полям внешнего ключа. Ниже приведены две мои модели, а также результат DB::profile(), который отображает вывод запроса. Обратите внимание, что он успешно создает запрос, однако UserID не привязан к нему.

В моем коде я вызываю модель как User::find(1)->roles. Я ожидаю получить массив ролей для этого конкретного пользователя, однако он пуст.

Модель пользователя

class User extends Eloquent
{
   public static $table = 'GDN_User';
   public static $key = 'UserID';
   public function roles()
   {
      return $this->has_many_and_belongs_to('role', 'GDN_UserRole', 'UserID', 'RoleID');
   }
}

Образец для подражания

class Role extends Eloquent
{
   public static $table = 'GDN_Role';
   public static $key = 'RoleID';
   public function users()
   {
      return $this->has_many_and_belongs_to('user', 'GDN_UserRole', 'RoleID', 'UserID');
   }
}

Вывод DB::profile()

array(2) {
  [0]=>
  array(3) {
    ["sql"]=>
    string(51) "SELECT * FROM `GDN_User` WHERE `UserID` = ? LIMIT 1"
    ["bindings"]=>
    array(1) {
      [0]=>
      int(1)
    }
    ["time"]=>
    string(4) "4.04"
  }
  [1]=>
  array(3) {
    ["sql"]=>
    string(367) "SELECT `GDN_Role`.*, `GDN_UserRole`.`id` AS `pivot_id`, `GDN_UserRole`.`created_at` AS `pivot_created_at`, `GDN_UserRole`.`updated_at` AS `pivot_updated_at`, `GDN_UserRole`.`UserID` AS `pivot_UserID`, `GDN_UserRole`.`RoleID` AS `pivot_RoleID` FROM `GDN_Role` INNER JOIN `GDN_UserRole` ON `GDN_Role`.`RoleID` = `GDN_UserRole`.`RoleID` WHERE `GDN_UserRole`.`UserID` = ?"
    ["bindings"]=>
    array(1) {
      [0]=>
      NULL
    }
    ["time"]=>
    string(4) "0.10"
  }
}

Полученный запрос хорош. Если я запускаю это прямо на своем сервере, он возвращает две группы для UserID = 1. Привязка не происходит, и я не уверен, является ли это ошибкой или я неправильно использую Eloquent.

Спасибо!


person kreeves    schedule 18.02.2013    source источник


Ответы (1)


Laravel часто записывает ключи в нижнем регистре. Я бы предложил использовать строчные буквы для всех экземпляров UserID и RoleID в ваших моделях и работать оттуда.

Если вы проектируете базы данных для использования с Laravel, стремитесь использовать имена таблиц и столбцов в нижнем регистре (я ценю, что если вы используете существующую базу данных, у вас может не быть выбора).

-- ФиллСпаркс

person Phill Sparks    schedule 18.02.2013