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->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 tinkerTask::create(['project_id' => 20,'name' =>'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->id
的值已设置且大于 0。
变量$request->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:如何保存多个表单字段?的主要内容,如果未能解决你的问题,请参考以下文章
Summernote 编辑器未打开(laravel 5.2)
Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单