Ваш вопрос больше относится к PHP, чем к Laravel.Если вы посмотрите документацию Сравнение объектов , вы увидите, что:
При использовании оператора сравнения (==) переменные объекта сравниваются простым способом, а именно: Два экземпляра объекта равны, если они имеют одинаковые атрибуты и значения (значения сравниваются с ==) и являются экземплярами одного и того же класса.
Итак ... В вашем случае вы загрузили $obj1
и $obj2
$obj1 = MyModel::find($id);
$obj2 = MyModel::find($id);
Если мы будем следовать рекомендациям, при запуске dd
PHP будет искать:
1.Экземпляр того же класса
Это true => MyModel::class == MyModel::class
2.Атрибуты : Это также верно, поскольку один и тот же класс равен одинаковым атрибутам.
3.Значения
Вы искали одну и ту же базу данных id
, поэтому Laravel отобразил результат запроса в двух разных экземплярах ... но извлек те же значения.
Теперь, когдавы выполняете ленивую загрузку , Laravel вставит в массив relations
новое значение.Таким образом, сравнение будет выполнено успешно для точек 1 и 2, но не получится в точке 3, так как
dd($obj1->relations)
/* RESULT
* [...]
* #relations: array:1[
* "users" => Collection { ... }
* ],
*/
dd($obj2->relations)
/* RESULT
* [...]
* #relations: array:0[],
*/
Значения в этих атрибутах различны, и сравнение не выполнено.