laravel有很多错误“站点id”没有默认值

qvk1mo1f  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(335)

我在控制器中有以下方法

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)
yyhrrdl8

yyhrrdl81#

$site = Site::create([
    "path" => $request->path,
    "site_link" => $request->link,
]);

不返回最后一个插入id。。。尝试

$site = new Site;
$site->path = $request->path;
$site->site_link = $request->link;
$site->save();

关于这一部分:

if ($request->features) {
    $features = explode(',', $request->features);

    foreach ($features as $feature) {
        $site->features()->save(SiteFeature::create(["feature" => $feature]));
    }
}

如果上面的代码不起作用,您可以这样做。。。

if ($request->features) {
    $features = explode(',', $request->features);

    foreach ($features as $feature) {
        $sf = new SiteFeature;
        $sf->feature = $feature;
        $sf->site_id = $site->id;
        $sf->save();
    }
}
9rbhqvlz

9rbhqvlz2#

这个 Model::create 方法实际上在数据库中创建了一条记录,因为您没有指定所需的 site_id ,这是失败,这就是为什么你看到这个错误。
看来你是想利用拉威尔的关系来拯救一个新的世界 SiteFeature 但是您正在将已经存在的对象(如果查询没有失败)传递给关系的 save 方法。
您需要传递 SiteFeature ,尚未保存到数据库的 save 方法:

$this->features()->save(new SiteFeature(['feature' => $feature]));

或者你可以用关系的 create 方法为避免必须同时传入示例,只需提供以下属性:

$this->features()->create(['feature' => $feature]);
ws51t4hk

ws51t4hk3#

试试这个
在您的模型中 features ```
public function features()
{
return $this->hasMany('App\SiteFeature','site_id','id');
}

你是模特吗 `SiteFeature` ```
public function siteFeatures()
{
  return $this->belongsTo('App\features', 'site_id', 'id');
}

相关问题