我有一个简单的数据库查询,可以从数据库中提取一些内容,例如:
$user->HeadHits = DB::table('csstats AS cs')
->where('cs.steamid', '=', $user->steam_id)
->select("cs.h_1")
->first()->h_1;
和刀片:
@if ($user->HeadHits == 0)
0%
@else
<?php echo number_format($user->HeadHits / $user->AllHits * 100,2); ?>%
@endif
但是如果在数据库中找不到用户steam_id,我会报错:
试图获取非对象的属性
有什么建议吗?谢谢
答案 0 :(得分:1)
这是因为当您使用DB
(查询生成器)和first
时,如果找不到该行,它将返回null
。
您需要添加一个签入项以查看该值是否存在:
$cs = DB::table('csstats AS cs')
->where('cs.steamid', '=', $user->steam_id)
->select("cs.h_1")
->first();
$user->HeadHits = $cs ? $cs->h_1 : 0;
一种更简短的方法是使用value():
$user->HeadHits = DB::table('csstats AS cs')
->where('cs.steamid', '=', $user->steam_id)
->value('h_1') ?: 0;
最后,仅供参考,但您无需明确地在列名之前添加表别名,因为您只查询一个表。另外,您无需将=
与where()
相加,因为它将假定这是应该使用的运算符。最终,您可以将代码简化为:
$user->HeadHits = DB::table('csstats')->where('steamid', $user->steam_id)->value('h_1') ?: 0;
答案 1 :(得分:0)
您可以使用isset()进行确认
喜欢
if(isset($user->HeadHits ) )