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();
3 Réponses :
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 >
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');
}
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:
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');
}
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');
}