Laravel - 拯救雄辩的关系

时间:2018-01-11 10:41:02

标签: php laravel eloquent relationship laravel-eloquent

我有3个型号用户商店 MerchantProduct

用户有很多商店 商店有很多MerchantProduct MerchantProduct属于用户和商店

我希望能够在user_id表中保存store_idmerchantproduct

用户模型

class User extends BaseModel { 
  public function stores()
  { 
   return $this->hasMany(Store::class);
  } 
  public function products()
  { 
   return $this->hasMany(MerchantProduct::class);
  } 
}

商店模式

class Store extends BaseModel { 
  public function owner()
  { 
   return $this->belongsTo(User::class);
  }
  public function merchantProducts()
  { 
   return $this->hasMany(MerchantProduct::class);
  }
}

商家模式

class MerchantProduct extends BaseModel { 
  public function owner()
  { 
   return $this->belongsTo(User::class);
  }
  public function store()
  { 
   return $this->belongsTo(Store::class);
  }
}

我曾尝试使用以下代码进行保存,但我正在调用

  

未定义的方法Illuminate \ Database \ Query \ Builder :: merchantProducts()错误

$request->user()->stores()->merchantProducts()->create($request->all());

正确/正确的方法是什么

2 个答案:

答案 0 :(得分:1)

首先,您不应将user_idowner()关系添加到MerchantProduct模型。

但是如果你想这样做,请手动添加用户ID保存MerchantProduct对象:

Store::merchantProducts()->create(['user_id' => auth()->id()] + $request->all());

另外,将user_id添加到$fillable模型中的MerchantProduct数组。

答案 1 :(得分:0)

我会采用非常简单的方法。由于您的store模型已经有user_id,因此您可以循环浏览store集合并保存到DB

($request->user()->stores() as $store){
    $merchant_product = new MerchantProduct();
    $merchant_product->user_id = $store->user_id;
    $merchant_product->store_id = $store->id;
    //your other fields go here as you want to insert to merchant product
    $merchant_product->save();
}