如何将表用户,商品和汽车与关系MySQL Laravel连接

时间:2019-03-01 10:30:24

标签: php mysql laravel

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

汽车迁移:

    $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');
}

优惠模式:

?

3 个答案:

答案 0 :(得分:3)

如您所说:
1 用户很多 汽车
1 用户 1 提供
1 Car 很多 优惠

因此,这里有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');
}

答案 1 :(得分:1)

一个用户可以每辆车发送一个优惠吗?

在您的优惠模型中,您将拥有:

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

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

然后在您的汽车模型中可以添加“优惠”关系:

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

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

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

答案 2 :(得分:0)

对于“报价”和“汽车模型”关系,这取决于您要如何连接它们,这是我在考虑的解决方案:

  1. 用户有一个要约,而汽车有一个要约,并且此要约属于一个用户和一辆汽车。 offer_table(id,价格,user_id,car_id) cars_table(id,car_type,mark,car_accessories)

用户模型

'homepage'

报价模型

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

汽车型号

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

2。用户有一个要约,而汽车有许多要约,并且此要约属于一个用户和一辆汽车。 offer_table(id,价格,user_id,car_id) cars_table(id,car_type,mark,car_accessories)

用户模型

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

报价模型

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

汽车型号

 public function car()
{
    return $this->belongsTo('App\Car');
}
public function user()
{
    return $this->belongsTo('App\User');
}
  1. 用户有一个要约,而汽车有许多要约,每个要约属于一个用户和多辆汽车。 offer_table(ID,价格,用户ID) cars_table(id,car_type,mark,car_accessories) 数据透视表[cars_offers](id,offer_id,car_id)

用户模型

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

报价模型

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

汽车型号

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