【发布时间】:2018-12-06 15:30:03
【问题描述】:
在这样的用例中,我对雄辩的模型有一些困难:
$skill1 = new Skill();
$skill1->title = "Test";
$skill1->save();
$skill3 = Skill::findOrFail($skill1->id);
$this->assertEquals($skill1, $skill3);
断言会出错,因为对象不相等 Comparasion result here 如果我们从关系中获取对象,则会有很多新字段(例如 original->relation)
我知道,Eloquent 模型中有 "is" 方法并且它工作正常,但是如果我需要使用像 in_array 这样的核心 PHP 函数(例如,它在 Collection 的 "contains" 方法中使用),比较不会工作。
问题是“如何比较这两个模型并像这样使用它:”
$this->assertTrue(collect([$skill1])->contains($skill3));
也许我可以重载比较运算符,也许我可以在 C# 中像 IComparable 一样制作 smthng?
谢谢。
【问题讨论】:
-
使用
$this->assertEquals(),您只能检查单个值。请尝试$this->assertSame() -
两个模型何时相等?当他们的所有属性都匹配时?还是只是 ID?
-
在我看来,模型是平等的,当所有属性都匹配时。
标签: php laravel laravel-5 activerecord eloquent