У меня есть 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», и все стало нормально …