在过去的两天里,我一直在尝试调试一个问题,我的代码如下,首先尝试通过其检索类别:
控制器
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>
并查看对象如何显示