在将记录插入MySQL时,防止Laravel 5隐式分配默认值

时间:2015-06-21 06:29:08

标签: mysql laravel

我来自Rails背景,我正在使用Laravel 5,我制作了String lastName = list.get(0).getLastName(); System.out.println(">>"+ lastName.charAt(0)+"<<"); System.out.println("Ascii Value: "+(long) lastName.charAt(0)); 模型,默认情况下所有列都应为CartItem。但是,如果我没有指定一些属性,比如:NOT NULL,Laravel将为我插入user_id,我不知道这是否被视为特征或错误,因为这种行为将隐藏一些缺陷或错误。

如果我忘记分配任何NOT NULL属性,我希望从MySQL获得Integrity Constraints Violation,但Laravel绝不会让它发生。如果Laravel将默认值插入0列,那么甚至将db列标记为NOT NULL的重点是什么,该框架无论如何都无法帮助我保护这种完整性。我想必须有一种轻轻禁用此功能的方法,请告诉我路径,谢谢。

更多详情:

我的NOT NULL表格如下:

CartItem

在修补匠中,我可以这样做:



    public function up()
        {
            Schema::create('cart_items', function(Blueprint $table)
            {
                $table->increments('id');
                $table->integer('user_id');
                $table->integer('product_id');
                $table->decimal('unit_price', 11, 2);
                $table->integer('quantity');
                $table->decimal('subtotal', 11, 2);
                $table->timestamps();
                $table->softDeletes();

                $table->index('user_id');
                $table->index('product_id');
            });
        }

这导致我的数据库中有一行,所有 >>> \App\CartItem::create([]) => { updated_at: "2015-06-21 06:57:31", created_at: "2015-06-21 06:57:31", id: 8 } 列都设置为0或0.00,我检查了我的数据库,所有这些列都设置为非空,默认为NOT NULL

2 个答案:

答案 0 :(得分:1)

很明显,问题不在Laravel中,但很可能在MySQL配置中。

根据您的操作系统,找到my.cnfmy.ini MySQL配置文件,并将STRICT_TRANS_TABLES添加到sql-mode值。

E.g。编辑前:
sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

编辑后:
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

保存配置文件后必须重新启动mysql,一切都可能按预期工作。

答案 1 :(得分:0)

最后我弄清楚了,Laravel 5没有为NOT NULL列分配默认值,但它确实默认关闭'严格'模式。

以下是config / database.php的一个片段:

var str = "3 pm"
var strArr = split(str) {$0 == " "}
var str1: String = strArr[0]
var str2: String = strArr[1]
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.numberOfLines = 2
label.text = str1+"\n"+str2

通过将 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'unix_socket' => env('DB_SOCKET', ''), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], 表单'strict'更改为false,我很高兴看到MySQL按照我的预期抛出异常。

true