【问题标题】:Laravel 5 dynamic input fields saving relation to databaseLaravel 5 动态输入字段保存与数据库的关系
【发布时间】:2016-02-23 15:35:30
【问题描述】:

我有一个名为name="step[]" 的动态输入字段。当提交表单并使用 dd 显示 $request->step 时,我得到了这个:

array:3 [
  0 => "Test Step 1"
  1 => "Test Step 2"
  2 => "Test Step 3"
]

所以它是一个数组。现在,当我想使用以下方法插入数据时:

    $project = new Project;

    $project->name = $request->name;

    $project->save();

    $project->steps()->saveMany($request->step);

我收到此错误:

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, string given

项目模型:

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

我的目标是创建一个新的Project 并将其保存到数据库中,并将所有steps 保存在我的Step 表中。所以每个Project都有很多步骤。不知道为什么我会收到上述错误,因为我正在传递一个数组?

【问题讨论】:

  • 一个array 是的。一个array 的模型,没有。 $project->steps()->saveMany( /** array of models expected */).
  • 谢谢,我明白了:)

标签: php laravel savemany


【解决方案1】:

我通常意识到使用 foreach 循环。你的关系方法看起来不错。这行得通吗?

foreach($request->steps as $step) {
  $project->steps()->create(['step' => $step]);
}

【讨论】:

  • 这同时工作 :) 我想在不使用 foreach 的情况下做某事,但自从 David Barker 向我指出了为什么我会收到错误,我可以努力实现我想要的 :)
【解决方案2】:

您是否尝试过使用附加方法?

$project->steps()->attach($resquest->input('steps'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 2021-09-18
    • 2021-09-18
    • 2019-08-20
    • 2016-05-05
    • 2020-07-20
    • 2018-05-05
    • 2020-07-23
    相关资源
    最近更新 更多