Laravel 表单一次性插入

Posted

技术标签:

【中文标题】Laravel 表单一次性插入【英文标题】:Laravel form insert in one go 【发布时间】:2015-06-29 12:35:26 【问题描述】:

我创建了一个包含 10 多个字段的普通 html 表单。其中一个字段是提交按钮(显然没有人愿意将其存储在数据库中)。我正在尝试使用 Product 模型中的以下语句将数据保存在表中:

在控制器中:

$id = Product::saveFormData(Input::all());

在模型中:

$id = DB::table('products')->insertGetId($data);

它给了我以下错误:

找不到列:1054 '字段列表'中的未知列'btncreateproduct'(SQL:插入productsnameurl_keyskuquantitypricespecialprice , description, preorder, page_title, header_data, custom_json_data, btncreateproduct, category_id) 值 (abc, aaa, bbb, 11, 2222, 1111, abcasdf, no, asdf, asdf , asdf, 创建产品, 2))'

现在,首先,为什么将btncreateproduct 视为一个字段。我不想在模型中指定字段列表,因为我希望此代码具有可扩展性(用户可以添加任意数量的字段)。

其次,值 abc、aaa 不像 'abc'、'aaa'

这意味着在当前时刻,它没有将它们视为字符串值。虽然它们是在数据库中定义的varchar

【问题讨论】:

嗨!你能发布你的HTML吗?您的提交按钮可能不是submit 【参考方案1】:

您使用 QueryBuilder DB::table('products')... 而不是模型本身来保存新产品的可能原因是什么?

在任何情况下,您都可以按照以下方式做一些事情

$input = Input::except(['btncreateproduct']);
$newProduct = Product::create($input);
$id = $newProduct->id;

话虽如此,您更好进行适当的验证和类型转换并手动分配这些值,因为在某些时候,表架构或表单都会改变并破坏您的代码。

【讨论】:

谢谢彼得,我会避开 DB::table。【参考方案2】:

关于按钮

你的按钮是你提交的一部分的原因是你放了属性名。

请参阅here 以供参考。

你可以用这个来测试:

<?php var_dump($_POST); ?>
<form action="index.php" method="post" id="form1">
    <button type="submit" name="test" value="Submit1">Submit A</button>
    <button type="submit" value="Submit2">Submit B</button>
</form>

关于在数据库中创建条目

您在代码中尝试执行的操作称为Massive Assignment,非常危险且不安全。

因此,按照建议,您应该使用 Product::create() 来使用您的模型。 除了模型Product 中的内容之外,您还必须插入属性$fillable

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model 
    // this is just an example, modify this part in accord to your needs
    protected $fillable = [`name`, `url_key`, `sku`, `quantity`, `price`, `specialprice`, `description`, `preorder`, `page_title`, `header_data`, `custom_json_data`, `category_id`];

    // other code here 
  

【讨论】:

感谢 borracciaBlu 它有效。我想要的是一个可扩展的解决方案,比如我们将 Magento 中的自定义属性添加到产品中。无论如何,我会尝试找出一些解决方案。

以上是关于Laravel 表单一次性插入的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 一次插入多条记录

PHP笔记-laravel框架记录session中flash()的一次应用

PHP笔记-laravel框架记录session中flash()的一次应用

laravel5.5表单验证

Laravel - 一次多个数据库[重复]

Laravel csrf 令牌在 ajax 上第二次不匹配