Laravel 5

Relation n:n

  • Avatar de EPCDEV
    Membre depuis :
    19/10/2016
    Messages :
    25

    Bonjour,

    Tous d'abord : mes meilleurs voeux à ceux qui lirons ce post.
    Ensuite :

    J'ai une table User avec (id, name, email, password).
    J'ai une table Filiale avec (id, filiale_name)

    J'ai une relation belongsToMany entre les deux :
    // création de table de relation

    Schema::create('filiales_user',function (Blueprint $table) {
    $table->increments('id');
    $table->integer('filiales_id')->unsigned()->index();
    $table->integer('user_id')->unsigned()->index();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('filiales_id')->references('id')->on('filiales')->onDelete('cascade');
    });

    Filiale :

    class Filiales extends Model
    {
    public $fillable = ['filiale_name'];

    public function users() {
    return $this->belongsToMany('App\User');
    }
    }

    User :

    class User extends Authenticatable
    {
    use Notifiable;

    /
    The attributes that are mass assignable.

    @var array
    /
    protected $fillable = [
    'name', 'email', 'password',
    ];

    /

    The attributes that should be hidden for arrays.

    @var array
    /
    protected $hidden = [
    'password', 'remember_token',
    ];

    public function filiales() {
    return $this->belongsToMany('App\Filiales');
    }

    public function roles() {
    return $this->belongsToMany('App\Roles');
    }
    }

    J'arrive à sauvegarder des données :

    $user->filiales()->attach($filialeId);

    Ma question est la suivante :
    Comment on lit la données :
    j'ai par exemple :
    $user = App\User::fist();

    Et je veux connaitre la filiale associé à ce user ?
    Sachant qu'on n'as pas de model de données pour la lire.

    Merci du coup de pouce. ça doit être simple mais je ne trouve pas ou n'ai pas compris.

    Cordialement

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1526

    Bonjour et tous mes voeux également !

    En vertu de la relation en place (belongsToMany) j'en déduis qu'un user peut être associé à plusieurs filiales. Dans ce cas le mieux est de faire de l'eager loading :

    $user = App\User::with('filiales')->first();

    Il suffit ensuite de mettre en place une boucle pour avoir toutes les filiales.

    Cordialement

  • Avatar de EPCDEV
    Membre depuis :
    19/10/2016
    Messages :
    25

    Bonjour bestmomo,

    Ok pour la premiere partie, mais c'est plus la boucle qui bloque.

    App\User {#754
    id: 1,
    name: "John Mamou",
    email: "john.mamou@epc.fr",
    created_at: "2016-12-28 15:54:18",
    updated_at: "2016-12-28 15:54:22",
    filiales: Illuminate\Database\Eloquent\Collection {#762
    all: [
    App\Filiales {#761
    id: 3,
    filiale_name: "EPC Belgique",
    zone_id: 1,
    created_at: "2016-12-26 14:44:18",
    updated_at: "2016-12-26 14:44:18",
    pivot: Illuminate\Database\Eloquent\Relations\Pivot {#760
    user_id: 1,
    filiales_id: 3,
    },
    },
    ],
    }
    }
    $user->filiales
    => Illuminate\Database\Eloquent\Collection {#762
    all: [
    App\Filiales {#761
    id: 3,
    filiale_name: "EPC Belgique",
    zone_id: 1,
    created_at: "2016-12-26 14:44:18",
    updated_at: "2016-12-26 14:44:18",
    pivot: Illuminate\Database\Eloquent\Relations\Pivot {#760
    user_id: 1,
    filiales_id: 3,
    },
    },
    ],
    }
    foreach($user->filiales as $filiale){ echo $filiale->filiales_name ; }
    resultat => null

    J'ai du louper quelque chose...

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1526

    Salut,

    Ca serait pas plutôt :

    echo $filiale->filiale_name;
  • Avatar de EPCDEV
    Membre depuis :
    19/10/2016
    Messages :
    25

    Merci pas vu la faute de frappe.

Vous ne pouvez pas répondre à ce sujet.