Красноречивые модели сравнения проблем - PullRequest
0 голосов
/ 27 июня 2018

У меня есть некоторые трудности с красноречивыми моделями в этом случае:

$skill1 = new Skill();
$skill1->title = "Test";
$skill1->save();

$skill3 = Skill::findOrFail($skill1->id);

$this->assertEquals($skill1, $skill3);

Утверждение дает ошибку, потому что объекты не равны Результат сравнения здесь Если мы получаем объект из отношения, появляется много новых полей (например, оригинал-> отношение)

Я знаю, что в моделях Eloquent есть метод "is", и он работает правильно, но если мне нужно использовать основную функцию PHP, такую ​​как in_array (например, она использует метод Collection, содержащийся в Collection), сравнение не будет Работа.

Вопрос в том, «Как сравнить эти две модели и использовать их так:»

$this->assertTrue(collect([$skill1])->contains($skill3));

Может быть, я могу перегрузить оператор сравнения, может быть, я могу сделать что-то вроде IComparable в C #?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Сравните атрибуты, а не целые модели:

$this->assertEquals($skill1->getAttributes(), $skill3->getAttributes());

Если вы сравните вновь созданную модель с моделью из базы данных, $wasRecentlyCreated отличается (среди прочего).

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