Laravel appartienePer non funziona

Ho 2 templates nella mia app, 'User' e 'MedicineType' (each Utente appartiene a un MedicineType).

Ho creato la relazione uno-a-molti tra due templates usando belongsTo () e hasMany (). hasMany () relazione funziona perfettamente ma belongTo () non funziona. Qualcuno sa where ho fatto un errore?

Utente :: find (1) -> medicine_type [questo non restituisce nulla]

MedicineType :: find (1) -> users [questo restituisce utenti]

Ecco il codice per i templates:

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

E qui è la mia struttura di database:

 users: id name medicine_type_id medicine_types: id name 

Il motivo per cui la relazione non funziona non è a causa delle relazioni specificate nel model, ma a causa della denominazione del metodo nel model Utente e non della chiave esterna.

Invece di:

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

Uso:

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

Spero che questo funzioni per te;)

Tutto insieme:

 <?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'); } } 

e:

 <?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'); } } 

Verifica se funziona:

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

Questo restituisce correttamente il nome del farmaco_type correlato.

Spero che questo ti aiuti ulteriormente;)

Forse c'è un problema con Eloquent nel trovare la chiave esterna. Prova questo:

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

MODIFICARE:

Inoltre, Eloquent prova a trovare la tabella "medicinetypes" e non "medecine_types", quindi è necessario specificarlo utilizzando anche la variabile $table .

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

Ho fatto lo stupido errore di non aggiungere il "return" nel metodo di relazione!

Assicurati di restituire la relazione … Ovviamente questo non functionrà:

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

Cambio "medicine_type" in "medicineType" e tutto è andato bene …