Laravel如果数据库表为空

时间:2018-07-22 16:16:44

标签: php mysql laravel

我有一个简单的数据库查询,可以从数据库中提取一些内容,例如:

$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,我会报错:

试图获取非对象的属性

有什么建议吗?谢谢

2 个答案:

答案 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 ) )