Laravel 5:模型上的fresh()在PHPUnit中不起作用

问题描述 投票:0回答:1

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

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

laravel laravel-5 phpunit
1个回答
0
投票

factory()返回Illuminate\Database\Eloquent\Factory的实例

它没有实现任何fresh()方法。

Model有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

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.