【问题标题】:Using laravel with() to fetch relationship when foreign key is of type double当外键为双精度类型时,使用 laravel with() 获取关系
【发布时间】:2020-07-12 22:30:12
【问题描述】:

我有这个模型关系:

public function reject_process()
    {
        return $this->belongsTo('App\Models\Process', 'reject_process_id');
    }

我有这个查询:

RejectSendProcess::with('reject_process')->normal()
            ->where(function ($q) use ($thisProcess) {
                $q->orWhere('process_id', floatval($thisProcess))
                    ->orWhere('process_id', $thisProcess);
            })
            ->get();

我的进程表有主键(id),其值为双倍,例如(0.5,1.0)。 当我使用上面的查询时,当相关进程的 id 为 0.5 时,我得到拒绝进程为空,尽管它包含数据同时如果相关进程像 1.0,我得到拒绝进程的相关数据。

我该如何解决这个问题,以便我得到reject_process的相关数据,无论外键的值是float还是integer。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    主键和外键不应该是浮点数。浮点数本质上是不精确的,它们的表示取决于太多的因素。

    我只能想象一个数据库试图匹配浮点索引(不包含确切值)中的浮点参数(不准确)并且没有得到任何结果(预期)。

    我知道这并不能真正回答您的问题,但您确实做错了。主键和外键应该是精确值(整数、字符串、二进制 id)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多