簡體   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