Laravel принадлежит Не работает

У меня есть 2 модели в моем приложении «User» и «MedicineType» (каждый пользователь принадлежит к одному типу MedicineType).

Я установил отношение «один ко многим» между двумя моделями, используя attributesTo () и hasMany (). Отношение hasMany () работает отлично, но propertyTo () не работает. Кто-нибудь знает, где я совершил ошибку?

Пользователь :: find (1) -> medicine_type [ничего не возвращает]

MedicineType :: find (1) -> пользователи [это возвращает пользователей]

Вот код для моделей:

class MedicineType extends Eloquent { public function users() { return $this->hasMany('User'); } } class User extends Eloquent { public function medicine_type() { return $this->belongsTo('MedicineType'); } } 

И вот моя структура базы данных:

 users: id name medicine_type_id medicine_types: id name 

Причина, по которой ваше отношение не работает, происходит не из-за отношений, указанных в модели, а из-за имени метода в модели User и не указывая внешний ключ.

Вместо:

 public function medicine_type() { return $this->belongsTo('MedicineType'); } 

Использование:

 public function medicineType() { return $this->belongsTo('MedicineType', 'id'); } 

Надеюсь, это сработает для вас;)

Все вместе:

 <?php // app/models/MedicineType.php class MedicineType extends Eloquent { // Determines which database table to use protected $table = 'medicine_types'; public function users() { return $this->hasMany('User'); } } 

а также:

 <?php // app/models/User.php class User extends Eloquent { // Determines which database table to use protected $table = 'users'; public function medicineType() { return $this->belongsTo('MedicineType', 'id'); } } 

Тестирование, если оно работает:

 $user = User::find(1); return $user->medicineType->name; 

Это успешно возвращает имя родственного medic_type.

Надеюсь, это поможет вам дальше;)

Возможно, проблема с Eloquent заключается в обнаружении внешнего ключа. Попробуй это:

 class User extends Eloquent { public function medicine_type() { return $this->belongsTo('MedicineType', 'medicine_type_id'); } } 

РЕДАКТИРОВАТЬ:

Кроме того, Eloquent пытается найти таблицу «medicinetypes», а не «medecine_types», поэтому вам нужно указать это, используя переменную $table .

 class MedicineType extends Eloquent { protected $table = 'medicine_types'; public function users() { return $this->hasMany('User'); } } 

Я сделал глупую ошибку, не добавляя «возврат» в методе отношений!

Убедитесь, что вы возвращаете отношения … Очевидно, что это не сработает:

 public function medicineType() { $this->belongsTo('MedicineType', 'id'); } 

Я меняю «medicine_type» на «medicineType», и все стало нормально …