【问题标题】:Laravel primary key does not allow nullLaravel 主键不允许为空
【发布时间】:2018-12-31 23:06:02
【问题描述】:

我正在使用 laravel+Nova,连接到现有软件的现有数据库。主键不是默认的“ID”,所以在“模型”处我将其更改为:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class products extends Model
{
    //
    protected $table = 't_items';
    protected $primaryKey = 'item_num';

    public $timestamps = false;

}

================================================ =============== 更改和更新 satabase (With nova) 时没有错误。 但是,当使用 save(对于新行或现有行)时,会出现错误:

SQLSTATE[42000]:[Microsoft][ODBC Driver 13 forSQL Server][SQL Server] Error converting data type nvarchar to numeric 9SQL select top 1 * drom [t_items][item_num] = null

"item_num" is defined as:
numeric
primary key
Allo nulls = false
Identity = false
Identity seed = 0
Identity increment = 0
Length = 9
Numeric precision = 10
Numeric scale = 0

我应该添加什么。我认为 laravel 在保存时没有定义 ID 并且服务器需要它

【问题讨论】:

  • 嗨,大卫,我在错误消息中看到了 Error converting data type nvarchar to numeric。你能用$incrementing = false on the model关闭主键的自动增量吗?
  • 我试过了。仍然出现此错误:SQLSTATE[42000]:[Microsoft][ODBC Driver 13 for SQL Server][SQL Server] 无法将值 NULL 插入列 'item_num'....
  • Cannot insert the value NULL into column 'item_num'. 等大卫,你能发布一下你是如何插入数据的吗?在将$incrementing 设置为false 之后,您必须在保存新模型时手动分配主键..
  • nova 在创建新行时不询问 id。我没有罚款如何让它要求它。尽管我在 App/Nova/Produccts php 中添加了 required 字段,如下所示: public function fields(Request $request) { return [ ID::make('ID', 'item_num') ->creationRules('required') - >sortable(), Text::make('item_name') ]; }
  • 我现在看到这个问题发生在其他人身上,但在 github 上没有得到回答或解决:github.com/laravel/nova-issues/issues/734

标签: laravel laravel-nova


【解决方案1】:

您必须将列设置为允许为空。这与 Laravel 无关。尽管对于您不希望像在“id”列中那样简单地设置递增的 id 来说这是一个非常奇怪的情况。

【讨论】:

  • 我不想更改数据库的定义,因为我正在使用现有软件的现有数据库。
猜你喜欢
  • 2013-12-29
  • 2021-12-30
  • 2018-07-19
  • 2012-08-12
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
相关资源
最近更新 更多