1

我有三个必须连接的表。用户、汽车、报价。每辆车都可以有很多优惠。用户可以拥有很多汽车(即连接)。我现在的任务是将 Car 与他们的报价和用户联系起来,但我现在有点困惑。看看我的迁移和模型。问题很简单,如何将 Car 与 Offers 和 Users 联系起来。一位用户可以发送一份报价。

汽车迁移:

    $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();

提供迁移:

    $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();

汽车模型:

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

用户型号:

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

提供型号:

?
4

3 回答 3

3

正如您所说:
1 用户辆车1用户1优惠1许多 优惠

因此,这里有 3 个关系,您还必须声明每个关系the inverse。因此,这里总共必须有 6 个模型中的关系函数。

用户型号:

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

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

汽车模型 :

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

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

提供型号:

public function car() {
     return $this->belongsTo('App\Car');
}
public function user() {
    return $this->belongsTo('App\User');
}
于 2019-03-01T10:41:27.627 回答
1

一位用户可以为每辆车发送一份报价吗?

在您的报价模型中,您将拥有:

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

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

然后在您的汽车模型中,您可以添加 Offer 关系:

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

要检索用户完成的每辆车的报价,您可以这样做:

User::find(1)->with('cars.offer')->get(); 
于 2019-03-01T10:40:53.257 回答
0

对于 Offer 和 Car Models 的关系,这取决于您要如何连接它们,这是我正在考虑的解决方案:

  1. 用户有一个Offer,汽车有一个Offer,这个Offer属于一个用户和一辆汽车。offer_table (id, price, user_id, car_id) cars_table (id, car_type, mark, car_accessories)

用户模型

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

报价模式

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

汽车模型

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

2. User有一个Offer,Car有ManyOffer,这个Offer属于一个User和一辆车。offer_table (id, price, user_id, car_id) cars_table(id, car_type, mark, car_accessories)

用户模型

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

报价模式

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

汽车模型

 public function offer()
{
    return $this->hasMany('App\Offer');
}
  1. User 有一个 Offer,Car 有很多 Offer,每个 Offer 属于一个用户和多辆汽车。offer_table (id, price, user_id) cars_table(id, car_type, mark, car_accessories) 数据透视表 [cars_offers] (id, offer_id, car_id)

用户模型

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

报价模式

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

汽车模型

 public function offer()
{
    return $this->belongsToMany('App\Offer');
}
于 2019-03-01T11:56:55.247 回答