Использование laravel с () для получения отношения, когда внешний ключ имеет тип double - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть эта модель отношений:

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). Когда я использую запрос выше, я получаю значение reject_process, равное нулю, когда связанный процесс имеет идентификатор 0,5, несмотря на тот факт, что он содержит данные, а если связанный процесс подобен 1,0, я получаю связанные данные reject_process.

Как я могу решить эту проблему так, чтобы я получил связанные данные reject_process, независимо от того, является ли значение внешнего ключа float или целым числом.

1 Ответ

2 голосов
/ 01 апреля 2020

Первичные и внешние ключи никогда не должны быть плавающими. Float неточны по своей природе, и их представление зависит от слишком многих факторов.

Я могу только представить базу данных, пытающуюся сопоставить аргумент float (который не будет точным) в индексе float (который не будет содержать точные значения) и не получить никакого результата (как и ожидалось).

Я знаю, что это на самом деле не отвечает на ваш вопрос, но вы действительно делаете это неправильно. Первичные ключи и внешние ключи должны быть точными значениями (целые числа, строки, двоичные идентификаторы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...