Laravel - 节省雄辩的关系
Posted
技术标签:
【中文标题】Laravel - 节省雄辩的关系【英文标题】:Laravel - Save on eloquent relationship 【发布时间】:2018-06-20 16:01:45 【问题描述】:我有 3 个模型 User、Store、MerchantProduct。
用户有很多商店 Stores有很多MerchantProduct MerchantProduct 属于用户和商店
我希望能够将user_id
和store_id
保存在merchantproduct
表中
用户模型
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());
这样做的正确/正确方法是什么
【问题讨论】:
dd($request->user()->stores())
如果结果是一个集合,你可以这样做,否则你必须使用$request->user()->stores->merchantProducts()
store_id 不是在功能上决定了 user_id 吗?如果你把它标准化,可能就不那么令人头疼了。
【参考方案1】:
我会采用非常简单的方法。由于您的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();
【讨论】:
【参考方案2】:首先,您不应该将user_id
和owner()
关系添加到MerchantProduct
模型中。
但如果您想这样做,请手动添加用户 ID 来保存 MerchantProduct
对象:
Store::merchantProducts()->create(['user_id' => auth()->id()] + $request->all());
另外,将user_id
添加到MerchantProduct
模型中的$fillable
数组中。
【讨论】:
谢谢。我尝试了这种方法,但仍然遇到问题中提到的相同错误。以上是关于Laravel - 节省雄辩的关系的主要内容,如果未能解决你的问题,请参考以下文章