【问题标题】:Laravel Eloquent add to table returns null in increment columnsLaravel Eloquent 添加到表中在增量列中返回 null
【发布时间】:2021-08-25 01:24:32
【问题描述】:

这是我的桌子

我的错误似乎表明,当我尝试运行 insert eloquent 时,我的两个 id 列 给出一个空值,这就是问题:

SQLSTATE[23502]:非空违规:7 错误:关系“hms_bbr_category”的列“id”中的空值违反非空约束细节:失败行包含(null,null,Insert 1,Insert Desc,null,空,空,空,空,空,空,空,空,空)。 (SQL:插入“hms_bbr_category”(“category_name”,“category_description”)值(Insert 1,Insert Desc)返回“id”)

型号: HmsBbrCategory

class HmsBbrCategory extends Model
{
    protected $table = 'hms_bbr_category';
    protected $primaryKey = 'id';
    public $timestamps = false;
}

路线:

Route::get('/bbr-category-configuration', function(){
    $addCategory = new App\Models\HmsBbrCategory;
    $addCategory->category_name='Insert 1';
    $addCategory->category_description='Insert Desc';
    $addCategory->save();
});

请注意,我一开始很简单,点击路由链接时插入触发。

我尝试手动插入增量选项,但它似乎仍然无法正常工作。

$addCategory = id->id + 1;
$addCategory = category_id->category_id + 1;

感谢您的帮助,如果问题仍需要澄清,请随时告诉我详细说明

更新

  • 请注意,我没有通过迁移创建此表,此表按原样提供给我,不允许更改。

  • 用包含“NOT NULL”的列更新了我的插入,但我得到了另一个错误:

    $addCategory = new App\Models\HmsBbrCategory;
    $addCategory = id->id + 1;
    $addCategory = category_id->category_id + 1;
    $addCategory->category_name='Insert 1';
    $addCategory->category_description='Insert Desc';
    $addCategory->created_by='Me';
    $addCategory->category_description=CURRENT_TIMESTAMP;
    $addCategory->save();
    

错误:

Symfony\Component\Debug\Exception\FatalThrowableError
syntax error, unexpected '->' (T_OBJECT_OPERATOR)

【问题讨论】:

  • 粘贴你的表格完整结构
  • 已添加,希望对您有所帮助
  • 你是如何创建表格的?使用 laravel 迁移?你是这样做的吗? laravel.com/docs/master/migrations#column-method-bigIncrements
  • 桌子给了我,我已经被创建了
  • $addCategory = id->id + 1; 是无效语法...它应该是 $addCategory->id = $addCategory->id + 1;,尽管这不起作用,因为默认情况下 $addCategory->id 将是 null... 你为什么要尝试像这样手动设置id;它应该是一个自动递增的主键。 $addCategory = category_id->category_id + 1; 也无效。请使用正确的 PHP stynax。

标签: sql laravel eloquent sql-insert


【解决方案1】:

根据您的表结构,这些列不能为空且没有默认值:

  • category_id
  • created_by
  • created_datetime

所以当您插入/更新时,这些列不能保持为空。

所以在您的代码中,您没有提供任何这些值。

“id->id + 1”也是错误的,因为您没有名为 id 的变量,即使您有,也不确定“id + 1”应该在表中给出什么。

但是 id 有一个默认值,并且看起来像是 nextval() ,所以你很好。

但是对于 category_id ,你需要传递一个整数 id ,如果你想获取表中最后一个 category_id 并添加 1 作为新的,这不是你可以做到的。

【讨论】:

  • 尝试用这些更新,添加了不为空的列,但我得到另一个错误,我更新了我的问题。
  • 如果我想获得最高的 int 值 + 1,代码会是什么样子?
  • @ButtonPress 你必须使用 sql 从表中获取 max(category_id) ,然后加起来 1。但是这是一个不好的方法,最好的方法是为列设置标识
  • 那么我该如何设置身份呢?
  • @ButtonPress ,这取决于您的 dbms ,但 GIYF ;)
猜你喜欢
  • 2019-08-29
  • 2014-07-30
  • 2013-02-25
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多