2016-02-27 3 views
1

я две модели пользователя и UserType объявлен следующим образом:Laravel ORM отношения возвращает нуль на Laravel 5,2

class User extends Model { 
    protected $table = 'user'; 
    protected $primaryKey = 'user_id'; 

    public function company() { 
     return $this->hasOne('App\Models\Company', 'company_id', 'company_id'); 
    } 

    public function userType() { 
     return $this->hasOne('App\Models\UserType', 'user_type_id', 'user_type_id'); 
    } 
} 

class UserType extends Model { 
    protected $table = 'user_type'; 
    protected $primaryKey = 'user_type_id'; 
} 

Теперь я запрашиваю отношения с помощью:

User::with('userType', 'company')->all() 

Как ни странно, я получаю компанию но userType всегда имеет значение null. Журнал запросов MySQL показывает, что Laravel смог получить запись user_type.

Единственное различие между компании и UserType отношения типа данных первичных ключей. company.company_id является числовым, а user_type.user_type_id - это строка. Я думаю, что это связано с типом данных ключей, однако у меня есть аналогичная настройка на Laravel 5.1, и она работает отлично.

ответ

0

Laravel поддерживает нечисловых первичные ключи, но вам необходимо установить:

public $incrementing = false; 

на вашей модели класса. я исправил проблему, изменив определение UserType на:

class UserType extends Model { 
    protected $table = 'user_type'; 
    protected $primaryKey = 'user_type_id'; 
    public $incrementing = false; 
} 
0

Первый вопрос я замечаю ваши отношения является то, что первый user_type_id вы перешли функции hasOne неправильно, потому что у вас есть user_type_id в качестве первичного ключа таблицу user_type. Второй аргумент hasone должен быть внешним ключом родительской таблицы, которая является пользователем. Поэтому, если у вас есть что-то вроде user_id в таблице user_type, используйте это вместо этого.

Но если это не так, и пользователь скорее принадлежит к UserType, тогда вам нужно изменить hasOne, которому принадлежит.

+0

Проблема - действительно тип данных, как я изначально предполагал. См. Мой ответ. – gmarintes

Смежные вопросы