Mysql
 sql >> Database >  >> RDS >> Mysql

Laravel appartiene al lancio di errori indefiniti

Dopo aver aiutato tramite chat, il problema era che esisteva una colonna chiamata group , e il metodo di relazione è stato anche chiamato group , quindi il valore della colonna della tabella aveva la precedenza sul metodo di relazione.

Rinominare il metodo di relazione o il group colonna a qualcosa come group_id sono entrambe soluzioni adatte (suggerirei il group_id percorso).

Risposta originale:

Recuperi il gruppo tramite una proprietà magica, non direttamente dal metodo.

echo User::find(1)->group->name;

Se recuperi il group() metodo, restituirà l'oggetto della relazione, non eseguirà alcuna query e preleverà l'oggetto relativo.

Inoltre, Eloquent farà ipotesi su quali siano i nomi delle colonne della chiave esterna. Group si tradurrebbe automaticamente in un group_id colonna. Se hai una colonna esistente chiamata group , quindi dovresti specificarlo esplicitamente nella tua relazione:

public function group () 
{
    return $this->belongsTo('Group', 'group');
}

Se ricevi un messaggio di errore "Tentativo di ottenere la proprietà di un non oggetto" per il group della proprietà , la tua relazione non restituisce alcun risultato ($user->group sarà NULL ). A quel punto, dovresti assicurarti che la tua relazione sia impostata correttamente (ad es. utilizzando il corretto requireTo, hasOne, hasMany, ecc.) e assicurarti di avere effettivamente una voce correlata nel tuo database.