繁体   English   中英

Laravel 6 - SQLSTATE [23000]:违反完整性约束:1048 列不能是 null

[英]Laravel 6 - SQLSTATE[23000]: Integrity constraint violation: 1048 Column cannot be null

我有一个controller将输入数据存储到 2 个不同的表中

Controller

public function store(Request $request)
    {
        $request->validate([
            'supplier_id' => 'required',
            'transaction_in_date' => 'required|before_or_equal:today',
            'device_type_id' => 'required',
            'device_brand_id' => 'required',
            'device_spec' => 'required|max:255',
            'price' => 'required',
            'amount' => 'required',
            'total_price' => 'required',
            'keterangan' => 'Nullable',
        ]);

        $transaction_in = new Transaction_in();
        $transaction_in->idTransaction_in = "0";
        $transaction_in->Supplier_id = $request->input('supplier_id');
        $transaction_in->transaction_date = $request->input('transaction_in_date');
        $transaction_in->save();
        $transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);

            foreach ( $transaction_in as $tin) {
                $tdin[] = [
                'Transaction_in_id' => $transaction_in->id[$tin],
                'DeviceType_id' => $transaction_in->device_type_id[$tin],
                'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
                'spek_device' => $transaction_in->device_spec[$tin],
                'device_price' => $transaction_in->price[$tin],
                'device_amount' => $transaction_in->amount[$tin],
                'device_total_price' => $transaction_in->total_price[$tin]
            ];
            Transaction_in_detail::insert($tdin);
        }

        return redirect('/transactionsin')->with('success', 'Transaction success');

    }

但是当我使用它时,它给了我这个错误

SQLSTATE[23000]:完整性约束违规:1048 列 'device_price' 不能是 null(SQL:插入transaction_in_detailsDeviceBrand_idDeviceType_idTransaction_in_iddevice_pricedevice_amountspek_devicedevice_total_price )值(?,?,??) ?,?))

Model 1

class Transaction_in extends Model
{
    protected $guarded = [];
    public function get_suppliers()
    {
        return $this->belongsTo(Supplier::class, 'Supplier_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    }
}

Model 2

class Transaction_in_detail extends Model {
    protected $guarded = [];
    public function get_transction_in_id()
    {
        return $this->belongsTo(Transaction_in::class, 'Transaction_in_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    } }

这是迁移代码https://hastebin.com/tacazikole.php

这是表格https://hastebin.com/imoxinuduq.xml

您的device_price列不可为空,即必须为其提供非空值。 你有几个选择:

  1. (不理想)创建另一个迁移以使列device_price可以为空或设置默认值首先,您必须使用composer require doctrine/dbal安装 dbal ,然后将其添加到新的迁移文件中: $table->decimal('device_price', 11, 2)->default(0)->change(); 并运行php artisan migrate
  2. (理想)在您的请求验证中使device_price成为必需,因此它永远不会是 null
  3. (取决于业务需求)修改您的循环以检查 device_price 是否为 null,可能退出循环或默认为 0。例如:
'device_price' => $transaction_in->price[$tin] ?? 0,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM