繁体   English   中英

Laravel 5.8 - 无法使用 Laravel 添加或更新子行

[英]Laravel 5.8 - Cannot add or update a child row using Laravel

我有一个包含多个数据的简单表,如下所示:

页表

在此处输入图像描述

我创建了一个与名为prebids的表的关系,如下所示:

public function up()
{
    Schema::create('prebids', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('bidder_name');
        $table->string('params_name');
        $table->string('params_value');
        $table->bigInteger('page_id')->unsigned();
        $table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');
        $table->timestamps();
    });
}

这是页面 model:

class Page extends Model
{
    protected $fillable = [
        "title",
        "articles",
        "status"
    ];

    public function prebids() {
        return $this->hasMany('App\Prebid');
    }
}

这是预出价 model:

class Prebid extends Model
{
    protected $fillable = [
        "params_name",
        "params_value",
        "bidder_name"
    ];
    public function page()
    {
        return $this->belongsTo('App\Page');
    }
}

现在,当用户单击添加预出价时,我想按照 model 存储预出价数据。

所以在pages index.blade.php上添加按钮我有这个

<td>
    <a href="{{ route('prebids.create'), $page->id}}"
       class="btn btn-sm btn-primary">Add prebid</a>

prebid controller我有以下内容:

class PrebidController extends Controller
{

    public function create()
    {
        $prebid = Prebid::all();
        $page = Page::all();

        return view('prebids.create', ['page' => $page]);
    }

    public function store(Request $request)
    {
        foreach ($request->input() as $parameters) {
            $parameters = new prebid();
            $parameters->save();
        }
        return redirect("/pages")->with("sucess", "data successfully saved");
    }

}

现在,当用户单击添加预出价时,它会打开一个表单,用户可以在其中添加信息并提交,当我提交时,我收到以下错误

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败( royalad ,CONSTRAINT prebids prebids_page_id_foreignpage_id )引用pagesid )ON DELETE CASCADE)(SQL:插入到prebids ( updated_at , created_at ) 值 (2019-11-06 15:24:34, 2019-11-06 15:24:34))

我的代码有什么问题?

您需要在保存之前将页面与 model 关联:

$parameters = new prebid();
$parameters->page()->associate( $theActualPageObject )
$parameters->save();

否则,您的prebid表中的page_id列将为空,这是不允许的,因为您在那里设置了与pages.id的关系 - 因此外键约束错误。

如果您不总是有一个页面,您还可以将page_id设置为可为nullable并将其默认为null

$table->bigInteger('page_id')->unsigned()->nullable()->default(null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM