我一直在尝试的是在测试中重新加载模型。
我一直在使用fresh()
,由于某种原因,它不会在测试中工作。 (可能这是一个错误)
这是一个片段。
//There is a relationship between Order and OrderItem.
//One Order hasMany OrderItem
$order = factory(Order::class)->create([...]);
$orderItem = factory(OrderItem::class)->create([
'order_id' => $order->id,
]);
$response = $this->delete('/api/order/' . $order->id);
$response->assertResponseStatus(200);
//This passes.
$orderItem = $orderItem->fresh();
$this->assertEquals($orderItem->some_attribute, 0);
最后一行产生trying to get property of non-object
。
$orderItem = $orderItem->fresh();
成
$orderItem->fresh();
这种方法根本没有刷新$orderItem
。
你看到我做错了吗?
任何建议都将受到赞赏。
PS
$orderItem = OrderItem::find($orderItem->id);
我尝试了这种方法,结果也是trying to get property of non-object
。
答案 0 :(得分:0)
factory()
返回Illuminate\Database\Eloquent\Factory
它没有实现任何fresh()
方法。
模型具有fresh()
方法的实现。
fresh(array|string $with = []) //Reload a fresh model instance from the database.
和
OrderItem::find($orderItem->id);
返回集合。
这是你可以做的。
OrderItem::where('id', $orderItem->id)->fresh();
参考:
https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Factory.html
希望这有帮助