【问题标题】:Laravel 5.2: How to save multiple form fields?Laravel 5.2:如何保存多个表单字段?
【发布时间】:2016-12-03 12:16:58
【问题描述】:

我有一个表格:

<label for="task-name" class="col-sm-3 control-label">Task</label>
    <div class="col-sm-6">
        <input type="text" name="name" id="task-name" class="form-control">
   </div>
</div>

<input name="project_id" id="task-project_id" type="hidden" value="{{ $project->id }}">

以及存储两个表单域的方法:

public function store(Request $request)
{
    $this->validate($request, [
       'name' => 'required|max:255',
       'project_id' => 'required',
    ]);

    Task::create([
        'project_id' => $request->project_id,
        'name' => $request->name,
    ]);

    return redirect()->back();;
}

但是,只有“名称”保存到 db 表中。任务表有两个列名,而我可以回显正确的 $request-&gt;project_id(以测试它是否通过)保存的 project_id 始终为“0”。

这是桌子:

mysql> explain tasks;
+------------+------------------+------+-----+- --------+----------------+
|领域 |类型 |空 |钥匙 |默认 |额外 |
+------------+------------------+------+-----+---- -----+----------------+
|编号 | int(10) 无符号 |否 |优先级 |空 |自动增量 |
|项目 ID |整数(11) |否 |穆尔 |空 | |
|姓名 | varchar(255) |否 | |空 | |
| created_at |时间戳 |是 | |空 | |
|更新时间 |时间戳 |是 | |空 | |
+------------+------------------+------+-----+---- -----+----------------+

还手动检查了创建:

App\Task::create(['project_id' => 20,'name' =>'testtt']); 

输出:

App\Task {
        name: "testtt",
        updated_at: "2016-07-29 01:08:09", 
        created_at: "2016-07-29 01:08:09", 
        id: 25
}

谢谢。

【问题讨论】:

  • 如果可能,请尝试将您的操作和架构的所有代码添加到您的表中。
  • 添加了完整的操作代码。研究如何粘贴解释任务;来自 phpmyadmin.......

标签: php html laravel laravel-5.2


【解决方案1】:

我在您返回的任务对象中根本看不到 project_id 属性:

App\Task {
    name: "testtt",
    updated_at: "2016-07-29 01:08:09", 
    created_at: "2016-07-29 01:08:09", 
    id: 25
}

这意味着您不允许在 $fillable 数组中的 Task 模型中使用 project_id 属性,因此请确保您的 $fillable 看起来像:

protected $fillable = ['name', 'project_id'];

希望这会有所帮助。

【讨论】:

  • 我认为它不可能是AUTO_INCREMENT,因为他说设置的值是0,据我所知,AUTO_INCREMENT列是从1开始的。
  • 更多信息添加到 q
  • 尝试静态创建 from 代码或 from tinker Task::create(['project_id' =&gt; 20,'name' =&gt;'test]);
  • Task::create(['project_id' => 20,'name' =>'test']);有相同的结果......'test'在那里,但project_id是0。
  • 这很奇怪吧???? >>> \App\Task::create(['project_id' => 20,'name' =>'testtt']); => App\Task {#652 名称:“testtt”,updated_at:“2016-07-29 01:08:09”,created_at:“2016-07-29 01:08:09”,id:25,}
【解决方案2】:

啊啊啊啊啊啊

    class Task extends Model
    {
      protected $fillable = ['name', 'project_id'];

      public function tasks()
      {
        return $this->belongsTo(Project::Class);
      }
    }

project_id 需要添加到任务模型中的 $fillable 中。

【讨论】:

    【解决方案3】:

    请确保:

    • $project-&gt;id 的值已设置且大于 0。
    • 变量$request-&gt;project_id已设置且大于0。
    • project_id 列存在。

    如果您在这 3 点上遇到任何问题,请告诉我,我会尽力帮助您,但我真的认为通过检查代码中的这 3 点,您会发现错误!尝试函数var_dump($var) 和浏览器检查器检查所有变量是否设置正确。

    祝你好运!

    【讨论】:

    • 此答案存在严重的格式或内容问题。这个答案不太可能通过编辑来挽救,可能需要删除。
    • 我没有尝试保存,而是只是回显了 $request->project_id 并且它是表单所在页面 /project/9 中的正确 id。
    • @ZakariaAcharki 你能告诉我为什么吗?
    【解决方案4】:

    在那个函数上试试这个:

    public function store(Request $request)
    {
        $this->validate($request, [
           'name' => 'required|max:255',
           'project_id' => 'required',
        ]);
    
        $task = new Task;
        $task->project_id = $request->project_id;
        $task->name = $request->name;
        $task->save();
    
        return redirect()->back();;
    }
    

    参考:https://laravel.com/docs/5.1/eloquent#inserting-and-updating-models

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 2017-03-20
      • 1970-01-01
      • 2016-11-26
      • 2016-10-27
      • 2023-03-19
      • 2018-09-30
      • 2016-11-07
      相关资源
      最近更新 更多