Illuminate\Database\Eloquent\Builder类的对象无法转换为字符串laravel 7



在过去的两天里,我一直在尝试调试一个问题,我的代码如下,首先尝试通过其检索类别:

控制器

public function index(Request $request)
{
$stats = [
'done' => UserTransaction::where('status', UserTransaction::STATUS['done']),
'canceled' => UserTransaction::where('status', UserTransaction::STATUS['canceled']),
'waiting_payment' => UserTransaction::where('status', UserTransaction::STATUS['waiting_payment']),
];
return view('admin.transaction.index', compact('stats'));
}

UserTransaction.php

const STATUS = [
'done' => 'done',
'canceled' => 'canceled',
'waiting_payment' => 'waiting_payment',
];

index.blade.php

<h3 class="info">{!! $stats['done'] !!}</h3>

我看到这个错误

类Illuminate\Database\Eloquent\Builder的对象无法转换为字符串(视图:C:\examplep3\htdocs\projects\webafra\tessa-admin\Modules\Dransaction\Resources\views\admin\index.blade.php(

我认为您需要修改您的查询

$stats = [
'done' => UserTransaction::where('status', UserTransaction::STATUS['done'])->first(),
'canceled' => UserTransaction::where('status', UserTransaction::STATUS['canceled'])->first(),
'waiting_payment' => UserTransaction::where('status', UserTransaction::STATUS['waiting_payment'])->first(),
];

还要确保$stats['done']返回object。你应该像$stats['done']->status一样提取

你也可以改进你的代码一点

在模型中创建一个scope方法

public function scopeStatus($query,$status){

$query->where('status',$status);

}

然后你可以像这个一样访问

UserTransaction::status(UserTransaction::STATUS['done'])->first();

此外,您可以在配置中单独保持状态数组不变,或者必须为每个状态创建每个范围

已更新由于您正在查找的状态计数

$stats = [
'done' => UserTransaction::where('status', UserTransaction::STATUS['done'])->count(),
'canceled' => UserTransaction::where('status', UserTransaction::STATUS['canceled'])->count(),
'waiting_payment' => UserTransaction::where('status', UserTransaction::STATUS['waiting_payment'])->count(),
]; 

您的$stats实际上是UserTransaction查询的一个Object,不能在刀片中显示为String。

使用调试stats对象

<h3 class="info">{!! dd($stats['done']) !!}</h3>

并查看对象如何显示

最新更新