Laravel 5:模型上的fresh()在PHPUnit

时间:2018-03-01 07:14:33

标签: laravel laravel-5 phpunit

我一直在尝试的是在测试中重新加载模型。

我一直在使用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

1 个答案:

答案 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

希望这有帮助