我来自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
。
答案 0 :(得分:1)
很明显,问题不在Laravel中,但很可能在MySQL配置中。
根据您的操作系统,找到my.cnf
或my.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