【问题标题】:Laravel: insert null into boolean column that is nullableLaravel:将空值插入可为空的布尔列
【发布时间】:2022-01-17 13:43:48
【问题描述】:

所以我在 Laravel 中创建了一个可以为空的布尔列

$table->boolean('colName')->nullable();

我遇到的问题是我想在其中插入一个空值。

但据我所知,如果您分配 null(使用 Eloquent 的创建或更新),php 会将 null 评估为 false,从而将 0(false)分配到列中。

$toInsert = null;

这不起作用。

我如何使用我的代码

首先我从表单中获取输入

$nullableVal = $request->input('nullable-value');

if($nullableVal == "yes"){
    $toInsert = true;
}else if($nullableVal == "no"){
    $toInsert = false;
}else{
    $toInsert = null;
}

我的商店/通过 eloquent 更新

$this->repository->update(['nullableVal' => $toInsert]);

有没有办法解决这个问题?

谢谢

【问题讨论】:

  • 那为什么不投呢? (bool) $toInsert 虽然这将插入为 false 而不是 null。如果您希望它为空,请不要插入任何内容。 if(!is_null($toInsert)) ..
  • 如果你赋值为null,它将为null,你测试过吗?这都是假设吗?代码是如何分配空值的?将其添加到您的问题中。
  • @N69S 经测试是的。我会更新我的帖子,但要点是:我收到来自表单的输入。此表单是一个包含三个选项的选择:是、否、不需要。然后在存储/更新之前,我有一个 if else 来检查输入的位置是、否或不需要。是 = 真,否 = 假,不需要 = 空。尽管赋值为 null,但它的计算结果为 false。
  • @very_naisu 您的“存储库”更新方法中的代码正在将 null 更改为其他内容(或忽略更新)检查它。仅作为一般信息,PHP 不会无缘无故地将 null 等值更改为零。当您将其转换为布尔值时,就会发生更改。比如当你做if (null)时,它会被认为是if(false)
  • @N69S 我会再次检查我的代码。谢谢

标签: php laravel eloquent laravel-8


【解决方案1】:

如果该字段可以为空,它的默认值应该是NULL,对吧?在这种情况下,只需删除 else 案例即可。

$model = new Model;

if ($nullableVal == "yes") {
    $model->colName = true;
} elseif ($nullableVal == "no") {
    $model->colName = false;
}

$model->save();

如果$nullableVal 既不是“是”也不是“否”,则不会设置 colName,因此在数据库中变为 NULL。

【讨论】:

  • 如果是更新则不起作用。
  • 明确设置为 null 应该可以工作,但你说它不行。也许您有一个事件或某些数据库触发器将值转换为布尔值?
【解决方案2】:

如果迁移有nullable(),则默认情况下它已经在数据库中NULL

默认为$toInsertNULL

$nullableVal = $request->input('nullable-value');

$toInsert = NULL;

if($nullableVal == "yes"){
  $toInsert = true;
}

$this->repository->update(['nullableVal' => $toInsert]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2017-09-11
    相关资源
    最近更新 更多