1
votes

Comment connecter la table utilisateur, offres et voiture avec la relation mysql Laravel

J'ai trois tables que je dois connecter. Utilisateurs, voiture, offre. Chaque voiture peut avoir de nombreuses offres. L'utilisateur peut avoir beaucoup de voitures (c'est-à-dire se connecter). Ma tâche est maintenant de connecter Car avec leurs offres et leurs utilisateurs, mais je suis un peu confus maintenant. Regardez ma migration et mes modèles. La question est simple de savoir comment connecter Car avec les offres et les utilisateurs. Un utilisateur peut envoyer une offre.

migrations de voitures:

?

propose des migrations:

public function cars(){
    return $this->hasMany('App\Car', 'user_id');
}

Modèle de voiture:

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

Modèle utilisateur:

    $table->increments('id');
    $table->integer('price');
    $table->unsignedSmallInteger('user_id');
    $table->unsignedSmallInteger('car_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('car_id')->references('id')->on('cars')->onDelete('cascade');
    $table->timestamps();

Modèle d'offre:

    $table->bigIncrements('id');
    $table->string('car_type');
    $table->string('mark');
    $table->longText('car_accessories');
    $table->unsignedInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->timestamps();


0 commentaires

3 Réponses :


1
votes

Un utilisateur peut envoyer une offre par voiture?

Dans votre modèle d'Offre, vous aurez:

User::find(1)->with('cars.offer')->get(); 

Ensuite, dans votre modèle de voiture, vous pouvez ajouter la relation Offre:

public function offer() {
    return $this->belongsTo(Offer::class);
}

Et pour récupérer l'offre pour chaque voiture que l'utilisateur a faite, vous pouvez le faire comme ceci:

public function user() {
    return $this->belongsTo(User::class);
}

public function car() {
    return $this->belongsTo(Car::class);
}

p >


0 commentaires

3
votes

Comme vous le dites:
1 Utilisateur à De nombreuses voitures
1 Utilisateur à 1 Offre
1 Voiture à Beaucoup Offres

Voici donc 3 relations, et pour chacune vous devez déclarer l'inverse également. Donc, totalement ici, il doit y avoir 6 fonctions de relation dans les modèles.

Modèle utilisateur:

public function car() {
     return $this->belongsTo('App\Car');
}
public function user() {
    return $this->belongsTo('App\User');
}

Modèle de voiture:

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

public function offers() {
         return $this->belongsTo('App\Offer');
    }


0 commentaires

0
votes

Pour les relations Offre et Modèles de voiture, cela dépend de la façon dont vous souhaitez les connecter, voici les solutions auxquelles je pense:

  1. L'utilisateur a une offre et la voiture a une offre, et cette offre appartient à un utilisateur et à une voiture. offer_table (id, prix, user_id, car_id) cars_table (id, car_type, mark, car_accessories)

Modèle utilisateur

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

Modèle de l'offre

public function car()
{
    return $this->belongsToMany('App\Car');
}
public function user()
{
    return $this->belongsTo('App\User');
}

Modèle de voiture

 public function offer()
{
    return $this->hasOne('App\Offer');
}

2. L'utilisateur a une offre et la voiture a de nombreuses offres, et cette offre appartient à un utilisateur et à une voiture. offer_table (id, prix, user_id, car_id) cars_table (id, car_type, mark, car_accessories)

Modèle utilisateur

 public function offer()
{
    return $this->hasMany('App\Offer');
}

Modèle de l'offre

 public function car()
{
    return $this->belongsTo('App\Car');
}
public function user()
{
    return $this->belongsTo('App\User');
}

Modèle de voiture

 public function offer()
{
    return $this->hasOne('App\Offer');
}
  1. L'utilisateur a une offre et la voiture a de nombreuses offres, et chaque offre appartient à un utilisateur et à plusieurs voitures. offres_table (id, prix, id_utilisateur) cars_table (id, car_type, mark, car_accessories) tableau croisé dynamique [cars_offers] (id, offer_id, car_id)

Modèle utilisateur

 public function offer()
{
    return $this->hasOne('App\Offer');
}

Modèle de l'offre

 public function car()
{
    return $this->belongsTo('App\Car');
}
public function user()
{
    return $this->belongsTo('App\User');
}

Modèle de voiture

 public function offer()
{
    return $this->hasOne('App\Offer');
}


0 commentaires