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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5:模型上的fresh()在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

答案

factory()返回IlluminateDatabaseEloquentFactory的实例

它没有实现任何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

希望这可以帮助

以上是关于Laravel 5:模型上的fresh()在PHPUnit中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

TokenMismatch ONLY 某些浏览器 - Laravel 5 Fresh/Production

模型上的 Laravel PHP 别名?

LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071

PHP 5.6.9 上的 Laravel 5 TokenMismatchException

为啥在使用 migrate:fresh 或其他时在 laravel 应用程序迁移中删除了迁移

Laravel 5.5 模型上的自定义软删除