laravel如果数据库表为空

tvokkenx  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(360)

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

$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\u id,则会出现错误:
尝试获取非对象的属性
有什么建议吗?谢谢

zfycwa2u

zfycwa2u1#

这是因为当你使用 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;
uxhixvfz

uxhixvfz2#

你可以用isset()检查
就像那样

if(isset($user->HeadHits ) )

相关问题