【问题标题】:store function not saving data to the database存储功能不将数据保存到数据库
【发布时间】:2020-02-15 23:04:18
【问题描述】:

我有一个表单,用户可以在其中输入不同的数据,表单包含两个部分。

第一部分数据将保存到名为pages的表中(完美),第二部分数据将保存到名为parameters的表中parameters包含一个包含重复数据名称的列(不工作),

这是表格的外观。

我为paramatersprebids 创建了一个PIVOT table 像这样的表。

prebid_parameter,

public function up()
{
    Schema::create('prebid_parameter', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('prebid_id')->unsigned();
        $table->foreign('prebid_id')->references('id')->on('prebids');
        $table->bigInteger('parameter_id')->unsigned();
        $table->foreign('parameter_id')->references('id')->on('parameters');
    });
}

和 page_prebid 一样。

public function up()
{
    Schema::create('page_prebid', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('page_id')->unsigned();
        $table->foreign('page_id')->references('id')->on('pages');
        $table->bigInteger('prebid_id')->unsigned();
        $table->foreign('prebid_id')->references('id')->on('prebids');

    });
}

我已经建立了这样的关系。

页面模型。

class Page extends Model
{
    protected $fillable =[
        "title",
        "articles",
        "status"
    ];
    public function prebids(){
        return $this->belongsToMany('App\Prebid');
    }
}

预投标模型。

class Prebid extends Model
{
    protected $fillable =["bidders_name"];

    public function parameters(){

        return $this->belongsToMany('App\Parameter');
    }
    public function pages(){

        return $this->belongsToMany('App\Page');
    }
}

参数模型看起来像这样。

class Parameter extends Model
{
    protected $fillable =[
        "params_name",
        "params_value",
        "bidders_name"
    ];
    public function prebids(){
        return $this->belongsToMany('App\Prebid');
    }
}

最后我有页面控制器存储功能来保存这样的数据。

 public function store(Request $request)
    {
        $page = Page::create([
            'title' => $request->get('title'),
            'articles' => $request->get('articles'),
            'status' => $request->get('status'),
        ]);

        $page->save();

        $page->tags()->sync($request->tags, false);
        $page->prebids()->sync($request->prebids, false);

        return redirect("/pages")->with("sucess", "data saved");
    }

当我添加 dd($request) 店内功能时,我得到以下信息

Note: parameter and prebid controllers are just empty

现在当我点击提交按钮时,只有第一部分数据保存到数据库中,其余部分不保存到数据库中。

这里是回购:demo

我的代码做错了什么?不过我是 laravel 的新手。

【问题讨论】:

  • return $this->belongsToMany('App\Prebids'); 是错字吗?因为模型被命名为Prebid
  • @Saly3301 是的,我错了,但还是一样
  • 解决了吗?
  • @devpro 不,我还在努力解决它:(

标签: php mysql sql database laravel


【解决方案1】:

有几件事正在跳出来。在您显示的模型中,我没有看到 tags 的实际关系。您在 Page 上与tags 有关系吗?

另外,这一行:

$page->prebids()->sync($request->prebids, false);

正在寻找来自prebids 请求的输入,但我在您的请求对象中没有看到。我看到params_value,它不会被发送到sync() 方法。 因此,不会被同步。

试试这个:

$page->prebids()->sync($request->params_value, false);

【讨论】:

  • 是的,我会把仓库发给你,你可以检查一下,会很简单,等一下
  • 这里是 repo github.com/throne1986/roayalad-blog 你可以检查我做错了什么
  • 是的,我可以在 repo 的 Page 模型上看到 tags()。但我看不到您将prebids 发送到哪里。我查看了 resources/views/pages/create.blade.php,它看起来像是在发送 params_value。您是否尝试过我答案的最后一行?
  • 改变你的建议,现在我得到这个SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (blog.page_prebid, CONSTRAINT page_prebid_prebid_id_foreign`外键(prebid_id)参考prebids(@98765436) (SQL: 插入page_prebid (page_id, prebid_id) 值 (7, eee)) `
  • 好的,很好。这意味着我们已经解决了最初的问题。您从 $request 对象中引用了错误的键。第二个问题是您的表单设置不正确(我认为) - 看起来您可能没有在表单上设置 id=>name 对?因此$request 只返回名称,而不是您预出价中的 id。您的表单以 TEXT 类型发送。要使多关系工作,您需要一个带有要匹配的 ID 的 SELECT。您需要重新设计表单和创建方法以将数据发送到该表单。但这是一个不同的问题:)
猜你喜欢
  • 2017-06-16
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2023-03-12
  • 2019-11-22
相关资源
最近更新 更多