[英]SQLSTATE[23000]: Integrity constraint violation: 4025 CONSTRAINT
嘿,当我将数据从 laravel 插入到 MySQL 时出现问题,出现错误 SQLSTATE[23000]: Integrity constraint violation: 4025 CONSTRAINT
这是商店 controller
public function store(Request $request)
{
// $faker = Faker::create('id_ID');
$image = $request->file('Product_photo');
$extension = $image->getClientOriginalExtension();
$name = $request->Name;
$file_name = $name.'.'.$extension;
$image->move("images/listcar/", $file_name);
DB::table('car')
->insert([
//'id' => $faker->unique()->numberBetween($min = 0, $max = 200),
'product_photo' => $file_name,
'name' => $request->Name,
'production_year' => $request->Production_year,
'price' => $request->Price,
'merk' => $request->Merk,
'description' => $request->Description,
'varian' => $request->Variant,
'machine' =>$request->Machine,
'transmision' => $request->Transmision,
'wheel' => $request->Wheel,
]);
return redirect('/admin');
这是我的刀片
<body>
<h1>Tambah Mobil</h1>
<div class="container">
<form action="/car/add" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
<th>Nama</th><br>
<input type="text" name="Name" value=""><br/><br>
<th>Tahun Produksi</th><br>
<input type="text" name="Production_year" value=""><br/><br>
<th>Harga</th><br>
<input type="number" name="Price" value=""><br/><br>
<th>Select Product Image</th><br>
<input type="file" name="Product_photo" /><br/><br>
<th>Merek</th><br>
<input type="text" name="Merk" value=""><br/><br>
<th>Deskripsi</th><br>
<input type="textarea" name="Description" value=""><br/><br>
<th>Varian</th><br>
<input type="text" name="Variant" value=""><br/><br>
<th>Mesin</th><br>
<input type="text" name="Machine" value=""><br/><br>
<th>Transmisi</th><br>
<input type="text" name="Transmision" value=""><br/><br>
<th>Penggerak Roda</th><br>
<input type="text" name="Wheel" value=""><br/><br>
<br>
<input class="btn btn-primary" type="submit" value="Tambah Data Mobil">
</form>
<br>
<br>
</div>
我真的不知道我哪里错了,所以请告诉我是否有错误的概念
更改 mysql 表上的排序规则 - utf8mb4_general_ci:)
检查您的 model $fillable
fillable 数组。 确保将插入记录的所有列都是 $fillable 的一部分
我有同样的问题并解决了:
如果您将非 json 保存到 JSON 字段中,则会发生此错误,如下所示:
$item = new WhatsAppWebhook($data);
$item->save();
return $item;
你需要编码
$payload = array("payload"=>json_encode($data));
$item = new WhatsAppWebhook($payload);
$item->save();
return $item;
$user_role = array(('role')=>json_encode($request['role']));
$user_role = implode(', ', $user_role);
我最近遇到了与 JSON 字段相关的 Laravel ‘constraint violation’ 错误。 日志没有透露,错误是间歇性的。 我花了一些时间,但幸运的是修复很容易。
Model
class 中,我将字段设置为受保护,然后提供了一个无效的默认值。{}
。当我第一次将代码部署到生产环境时,我看到了一个 HTTP-500 错误,这在我的本地测试中并没有出现:
[2022-09-27 03:54:27] local.ERROR: SQLSTATE[23000]: Integrity constraint violation:
4025 CONSTRAINT `table.field3` failed for `database`.`table` (SQL: insert into `table` (`field1`, `field2`, `field3`
...
#0 /path/to/project/vendor/laravel/framework/src/Illuminate/Database/Connection.php(719):
Illuminate\\Database\\Connection->runQueryCallback('insert into `ta...', Array, Object(Closure))
不是一个非常有启发性(双关语意)的日志条目,而且我无法在我的 vagrant 开发环境中重现该错误。 vagrant 盒子和生产环境之间的唯一区别是 MariaDB 是 10.9 版,而生产环境中是 10.7 版。
事实证明,在 Laravel 迁移中字段类型为json()
很重要。
数据库/迁移/2022_09_25_133630_create_model_table.php:
new class extends Migration
{
public function up()
{
Schema::create('my_model', function (Blueprint $table) {
$table->id();
...
$table->json('field3');
我一直想知道为什么 Laravel 在创建 SQL 表后都减少到少数几个时,为什么 Laravel 在迁移中遇到这么多字段类型。 在本例中, longtext
列是长文本(不可为空)。
在 Laravel 的Model
class 中,我将字段设置为 guarded,然后提供了一个我认为合适的默认值。
应用程序/模型/my_model.php:
class my_model extends Model
{
use HasFactory;
/**
* The attributes that are NOT mass assignable.
*
* @var string[]
*/
protected $guarded = [
'field3'
];
/**
* Default values for attributes.
*
* @var array
*/
protected $attributes = [
'field3' => "",
];
一定是MariaDB这两个版本的字段是如何存储的底层机制在这里凸显出来的? 出现错误是因为我作为默认值提供的空字符串不是有效的 JSON 编码,因此与 json() 的 Laravel 字段类型不兼容。 在我看来,它在 MariaDB 中不可为 null 的长文本列的上下文中是完全有效的。
在 Laravel 中,使模型的 JSON 字段的默认值有效 JSON 编码字符串。
应用程序/模型/my_model.php:
class my_model extends Model
{
use HasFactory;
/**
* The attributes that are NOT mass assignable.
*
* @var string[]
*/
protected $guarded = [
'field3'
];
/**
* Default values for attributes.
*
* @var array
*/
protected $attributes = [
'field3' => "{}",
];
如果某个字段不可为空且没有默认值而没有值,也可能会发生此错误。
要解决此问题,请在您的代码或偏头痛中添加默认值。
以下是将 email 字段更新为可空并将价格默认值设置为零的迁移示例:
<?php
Schema::table('users', function (Blueprint $table) {
$table->string('email', 255)->nullable()->change();
$table->integer('price')->default(0)->change();
});
我还发现问题的根源在于 json() 类型的字段的默认值错误。
在我的博客上写到: https://www.dfoley.ie/blog/laravel-constraint-violation-error-on-json-field
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.