Laravel 5

BelongTo() ne fonctionne pas

Avatar de MaxAntoine
MaxAntoine

Bonjour, je me dirige vers vous car j'ai passé mon après midi à bloqué sur quelque chose qui dois ête simble, Je m'explique:

  • J'ai deux tables "Users" et "UserClear" avec un champs commun ("id_tss" et "user_id_tss" il ne sagit donc pas de l'id des deux table(La clé primaire))
  • Je dois donc réalisé un hasmany() et belongTo()

Voici mon code des deux models

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'login', 'lastname', 'firstname', 'id_tss', 'email', 'password', 'rank'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    
    public function userClear()
    {
        return $this->hasMany('App\UserClear', 'user_id_tss','id_tss');
    }
}

et

class UserClear extends Model
{
    protected $table = 'user_clear';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user_id_tss', 'lastname', 'firstname', 'email', 'password_temp'
    ];

    /**
     * Get the user of this user_clear
     */
    public function testtest()
    {
        return $this->belongsTo('App\User', 'id_tss', 'user_id_tss');
    }
}

Voici maintenant mon code dans la controleur

public function test()
    {
        //Je test le HasMany()
        $user= User::findorfail(1);
        echo $user->userClear;
        
        //Je test le belongTo()
        $userClear = UserClear::findorfail(1);
        echo $userClear->testtest;
    }

Le hasMany() fonctionne parfaitement la où le belongTo() ne fonctionne pas du tout et me retourne rien du tout.

Merci d'avance pour le temps que vosu allez y passé, je suis à votre disposition si vous avez des questions suplémentaire.

Posté il y a 6 mois
Avatar de itanea
itanea

Hello,

Je dis peut être une bétise, mais ton model User ne devrait il pas étendre plutôt model et implémenter authenticatable ?

class User extends Model implements Authenticatable

{

C'est une réponse rapide, je n'ai pas eu le temps de tester.

++

Posté il y a 6 mois
Avatar de MaxAntoine
MaxAntoine

Salut, merci de ta réponse, alors c'est le model crée de base par Laravel, après des heures de test j'ai enfin trouvé, j'ai inversés les paramètres dans mon belongsTo()

Voici ce que j'aurai du ecrire :

/**
     * Get the user of this user_clear
     */
    public function testtest()
    {
        return $this->belongsTo('App\User', 'user_id_tss', 'id_tss');
    }
Posté il y a 6 mois
Avatar de itanea
itanea

Ha oui bien vu, perso, j'avais pas fait gaffe à l'ordre des paramètres. Du coup Laravel t'envoyait une page d'erreur tout de même (avec le mode debug activé) ?

Posté il y a 6 mois
Avatar de MaxAntoine
MaxAntoine

Non du tout, c'est ce qui est perturbant, il me disai juste qu'il ne trouvez absolument rien. Je sais jamais dans quel sens mettre les paramètres et en plus c'est la première fois que je n'utiliser pas le user_id de base avec id. Mais voilà pour les prochains, faite bien attention a l'ordre de vos paramètres.

Posté il y a 6 mois
Avatar de bestmomo
bestmomo

Si tu te trompes avec deux possibilités évite de jouer au loto :)

Posté il y a 6 mois
Avatar de itanea
itanea

Pas faux BestMomo :D

Posté il y a 6 mois
Avatar de bestmomo
bestmomo

Plus sérieusement personnellement quand je coince dans ce genre je regarde la requête générée, ça permet de lever rapidement le loup...

Posté il y a 6 mois

Vous ne pouvez pas répondre à ce sujet.