Модель Laravel Eloquent возвращает значение даже при неверном условии - PullRequest
1 голос
/ 16 апреля 2019

У меня не возникает следующая проблема:

  1. $user = App\User::where('id', 1)->first(); работает

  2. $user = App\User::where('id', '1')->first(); работает - тот же результат

  3. $user = App\User::where('id', '1xxxx')->first(); работает - тот же результат

  4. $user = App\User::where('id', 'x1')->first(); не работает

Я удивлен на 2., больше на 3. и даже больше на 4 .. Любая подсказка?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Поскольку столбец id является типом int, он ожидает значение int для сравнения и (int) '1xxxx' = 1, поэтому все эти результаты ожидаются только.

с использованиемповозиться

>>> App\User::where('id', '1xxxxx')->first();
=> App\User {#3118
     id: 1,
     name: "superadmin",
     email: "abajaj281@yahoo.com",
     created_at: "2019-01-11 19:06:23",
     updated_at: "2019-01-11 19:06:23",
   }
>>> App\User::find('1xxxxx');
=> App\User {#3123
     id: 1,
     name: "superadmin",
     email: "abajaj281@yahoo.com",
     created_at: "2019-01-11 19:06:23",
     updated_at: "2019-01-11 19:06:23",
   }

и

    >>> App\User::find('xxxxx1');
    => null
   Psy Shell v0.9.9 (PHP 7.2.10 — cli) by Justin Hileman
   >>> App\User::where('id', 'xxxxx1')->first();
   => null
   >>> App\User::where('id', 'x1')->first();
   => null
    >>>
   >>> App\User::find('x1');
   => null
    >>>
1 голос
/ 16 апреля 2019

Это происходит потому, что в фоновом режиме он совпадает с value в зависимости от типа столбца.

Будучи столбцом int, он преобразует значение в int форма, такая как эта

https://3v4l.org/JkU9H

Значение всех трех точек соответствует value 1, в то время как последнее соответствует 0 из-за невозможности конвертировать "x" в int

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