【问题标题】:Call to a member function socials() on null在 null 上调用成员函数 socials()
【发布时间】:2020-03-28 00:16:16
【问题描述】:

我在 laravel 中有以下迁移:

    Schema::create('settings', function (Blueprint $table) {
        $table->increments('id');
        $table->longText('about_us');
        $table->string('phone');
        $table->string('email');

        $table->timestamps();
    });

    Schema::create('socials', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->string('link');
        $table->integer('setting_id')->unsigned();
        $table->timestamps();
        $table->foreign('setting_id')
            ->references('id')->on('settings')
            ->onDelete('cascade');
    });

在设置模型中我有很多关系:

 public function socials()
{
    $this->hasMany(Social::class,'setting_id');
}

在我的控制器中,我正在这样做:

    $settings = new Setting();
    $settings->about_us = $request->get('about_us');
    $settings->email = $request->get('email');
    $settings->phone = $request->get('phone');
    $settings->save();
    $settings->socials()->saveMany([
        $this->make_socials($request, 'facebook'),
        $this->make_socials($request, 'linkedin'),
        $this->make_socials($request, 'instagram')
    ]);
    return responder()->success($settings)->respond('200');
}

我得到这个错误是什么?

【问题讨论】:

    标签: php laravel relationship


    【解决方案1】:

    您在关联方法中错过了return

    public function socials()
    {
        return $this->hasMany(Social::class,'setting_id');
    }
    

    【讨论】:

    • 我的错,对不起这个问题))
    • SQLSTATE[23000]:完整性约束违规:1048 列“setting_id”不能为空(SQL:插入socialstitlelinksetting_id,)
    • 我收到了
    • 不应该用saveMany自动设置setting_id?
    • 我认为它应该自动设置。它在查询中有setting_id,这可能意味着设置了id,但null。在保存关系之前使用dd($settings),检查$settings是否填充了id属性。
    【解决方案2】:

    使这个可以为空。因为在这种情况下,当你没有为 setting_id 设置一个值时,它会给你一个错误。因为它不能为空。让它可以为空

    $table->integer('setting_id')->unsigned()->nullable();
    

    然后

    php artisan migrate:refresh
    

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2020-03-10
      • 2017-09-24
      • 2018-02-06
      • 2018-09-29
      • 2018-08-04
      • 2020-10-28
      • 2020-09-01
      • 2023-03-14
      相关资源
      最近更新 更多