Bonjour à tous.

Dans une App Laravel, j´ai un modèle user ainsi qu´un modèle contract.

Un contrat doit avoir pour relation deux user.

comment puis je définir une relation pour mon Contract.from_user_id et Contract.to_user_id ?

Nous ferions une relation Belongs To classique avec un seul utilisateur mais comment procéder dans un cas comme celui ci ?

En vous remerciant.

3 réponses


Kareylo
Réponse acceptée

Exactement de la même façon que n'importe quelle autre relation, à l'exception que tu vas définir toi-même les différentes clés étrangères, qui ne respectent pas vraiment les conventions.

Dans ton modèle Contract, tu auras tes belongsTo :

public function fromUser(): BelongsTo
{
    return $this->belongsTo(User::class, 'from_user_id');
}

public function toUser(): BelongsTo
{
    return $this->belongsTo(User::class, 'to_user_id');
}

Et dans ton modèle User, tu auras tes hasMany :

public function fromContract(): HasMany
    {
        return $this->hasMany(Contract::class, 'from_user_id');
    }

public function toContract(): HasMany
    {
        return $this->hasMany(Contract::class, 'to_user_id');
    }

Bonjour. Je pense que la solution au problème c'est d'utiliser une table pivot "users_contract" (par exemple) avec une relation many to many (https://laravel.com/docs/10.x/eloquent-relationships#many-to-many).

merci beaucoup, ça fonctionne comme ça !