Laravel 5.2:如何保存多个表单字段?

Posted

技术标签:

【中文标题】Laravel 5.2:如何保存多个表单字段?【英文标题】:Laravel 5.2: How to save multiple form fields? 【发布时间】: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....... 【参考方案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

【讨论】:

以上是关于Laravel 5.2:如何保存多个表单字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Laravel 5.2中将表单数据作为路由参数传递

Summernote 编辑器未打开(laravel 5.2)

如何使用 laravel 将表单字段保存在 2 个表中

如何在 LARAVEL 5.2 中将数据存储到数据库中

Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单

在 Laravel 5 中将多行从动态表单保存到数据库