【发布时间】:2017-04-10 13:49:44
【问题描述】:
我有一个关于在 Laravel 中保存多态关系的问题。这是我想在 laravel 中创建的模型。
一家商店有很多产品,一个产品可以是“商品”、“活动”或“服务”。
我有以下表格:
- 商店
- 身份证
- user_id
- 姓名
- 事件
- 身份证
- 公开
- 标题
- 说明
- 产品
- 身份证
- shop_id
- productable_id
- productable_type
这就是我设置模型的方式:
class Shop extends Model{
public function products(){
return $this->hasMany('App\Product');
}
}
class Product extends Model{
public function productable(){
return $this->morphTo();
}
}
class Event extends Model{
public function product(){
return $this->morphOne('App\Product','productable');
}
}
我希望能够做到以下几点:
$shop = Shop::first()
$event = Event::create(['title'=>'Some event']);
$service = Service::create(['title' => 'Some service']);
$shop->products()->save($event);
$shop->products()->save($service);
但它不起作用!当我尝试保存我得到的关系时:
Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1 no such column: shop_id (SQL: update "accendo_events" set "updated_at" = 2016-11-26 10:11:02, "shop_id" = 1 where "id" = 1)'
有人知道这是哪里出了问题吗?我可能误解了这种类型的关系......
【问题讨论】:
-
试试
$shop->products()->create($event); -
@Sherif 也不起作用。我得到:TypeError: Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::create() 必须是数组类型,对象给定在第 3 行
-
对不起,我们没有在这里创建。一个事件属于一个产品,所以这个语法是错误的
-
你需要指定某个产品然后
$product->create($event); -
不确定
标签: php sql laravel eloquent polymorphism