首先添加一个反向关系Shop
from Product
Model
class Shop extends Model
{
public function products()
{
return $this->hasMany('App\Product');
}
}
class Product extends Model
{
public function shop()
{
return $this->belongsTo('App\Shop');
}
public function productable()
{
return $this->morphTo();
}
}
class Event extends Model
{
public function product()
{
return $this->morphOne('App\Product', 'productable');
}
}
现在,我不确定您为什么要尝试创建一个空事件并将其添加到所有产品中,但如果您想针对任何用例执行此操作...请遵循以下方法...:)
$shop = Shop::first(); //or $shop = Shop::find(1);
foreach($shop->products as $product) {
$event = Event::create([]);
$service = Service::create([]);
$product->productable()->saveMany([
$event, $service
]);
}
如果有什么不起作用,请在下面的评论中告诉我:)
-- Edit
首先请您理解,您无法添加条目productable_id
or productable_type
from a hasMany()
关系。您需要确保您使用的是morph
出于此类目的的关系。
其次,由于您尝试首先添加产品而不是事件,因此插入方法不适合您。请注意,您必须尝试创建一个活动或服务优先然后尝试与商店建立联系。
最简单的方法是
$shop = Shop::first();
$event = Event::create(['title' => 'Some Event']);
$event->product()->create(['shop_id' => $shop->id]);
$service = Service::create(['title' => 'Some Service']);
$service->product()->create(['shop_id' => $shop->id]);
您也可以尝试遵循我的第一种方法,但我刚才提到的方法绝对应该有效......实际上这就是插入/创建它的方式。