首页 文章

Laravel有很多错误 . 'site_id'没有默认值

提问于
浏览
0

我在控制器中有以下方法

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 属性 SiteFeature

protected $fillable = ['feature', 'site_id'];

由于某种原因,我得到下一个错误

local.ERROR:SQLSTATE [HY000]:常规错误:1364字段'site_id'没有默认值(SQL:插入到site_features(feature)值(fes)){“exception”:“[object](Illuminate \ Database \ QueryException(代码:HY000):SQLSTATE [HY000]:常规错误:1364字段'site_id'没有默认值(SQL:插入到site_features(feature)值(fes))

3 回答

  • 0

    Model::create 方法实际上在您的数据库中创建了一条记录,因为您没有指定所需的 site_id ,所以它失败了,这就是您看到此错误的原因 .

    看起来像是为了保存站点的新 SiteFeature ,但是你失败了关系的 save 方法 .

    您需要将尚未保存到数据库的 SiteFeature 的新实例传递给save方法:

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

    或者你可以使用关系的create方法来避免必须完全传入一个实例,你只需要提供以下属性:

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

    试试这个

    在你的模型 features

    public function features()
    {
      return $this->hasMany('App\SiteFeature','site_id','id');
    }
    

    你建模 SiteFeature

    public function siteFeatures()
    {
      return $this->belongsTo('App\features', 'site_id', 'id');
    }
    
  • 0
    $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();
        }
    }
    

相关问题