我在控制器中有以下方法
public function store(Request $request)
{
$site = Site::create([
"path" => $request->path,
"site_link" => $request->link,
]);
if ($request->features) {
$features = explode(',', $request->features);
foreach ($features as $feature) {
$site->features()->save(SiteFeature::create(["feature" => $feature]));
}
}
return response()->json($site, 201);
}
站点模型具有此方法
public function features()
{
return $this->hasMany('App\SiteFeature');
}
这是我的 $fillable
a的性质 SiteFeature
```
protected $fillable = ['feature', 'site_id'];
不知什么原因,我犯了下一个错误
local.error:sqlstate[hy000]:常规错误:1364字段“site\u id”没有默认值(sql:insert into) `site_features` ( `feature` )values(fes)){“exception”:“[object](illuminate\database\queryexception(code:hy000):sqlstate[hy000]:常规错误:1364字段'site\u id'没有默认值(sql:insert into `site_features` ( `feature` )价值观(fes)
3条答案
按热度按时间yyhrrdl81#
不返回最后一个插入id。。。尝试
关于这一部分:
如果上面的代码不起作用,您可以这样做。。。
9rbhqvlz2#
这个
Model::create
方法实际上在数据库中创建了一条记录,因为您没有指定所需的site_id
,这是失败,这就是为什么你看到这个错误。看来你是想利用拉威尔的关系来拯救一个新的世界
SiteFeature
但是您正在将已经存在的对象(如果查询没有失败)传递给关系的save
方法。您需要传递
SiteFeature
,尚未保存到数据库的save
方法:或者你可以用关系的
create
方法为避免必须同时传入示例,只需提供以下属性:ws51t4hk3#
试试这个
在您的模型中
features
```public function features()
{
return $this->hasMany('App\SiteFeature','site_id','id');
}