【问题标题】:How can I check if laravel count result is null or not如何检查 laravel 计数结果是否为空
【发布时间】:2020-04-09 02:34:33
【问题描述】:

我有这个代码:

$status = htransaksi::find(auth()->user()->id)->where('Status','Open')->count();
if ($status != 0)
{
    $idhtrans = htransaksi::select('id')->where('User_ID', auth()->user()->id)->where('Status', 'Open')->first();
    $shopcart = DB::table('detiltransaksis')->join('Barangs', 'Barangs.id', '=', 'detiltransaksis.barang_Id')->where('htrans_Id', $idhtrans->id)->get();
    return view('home')->with('barang', $barang)->with('jenis', $jenis)->with('shopcount',$shopcart);
}
else
{
    return view('home')->with('barang', $barang)->with('jenis', $jenis);
}

此代码检查,您的购物车中有商品吗?如果有商品,则返回该购物车,当没有商品时,它会显示一些错误提示

在 null 上调用成员函数 where()

有人知道如何解决这个问题吗? 我是 Laravel 的新手,如果这是一个新手问题,我很抱歉。

编辑: 错误指向

 $status = htransaksi::find(auth()->user()->id)->where('Status', 'Open')->count();

【问题讨论】:

  • where() 是哪个?将其调试到确切的行。一些提示:1)你不应该使用DB::table(),而是使用'detiltransaksis'的Eloquent模型。 2) 第一行的where() 语句不是SQL where 而是PHP where。阅读laravel.com/docs/5.8/eloquent
  • 我们在谈论哪个where()?你能发布整个错误吗?
  • 错误指向 $status = htransaksi::find(auth()->user()->id)->where('Status','Open')->count();

标签: laravel model-view-controller controller


【解决方案1】:

我看到htransaksi::find(auth()->user()->id)->where('Status','Open')->count(); 不正确。在find() 之后不能使用where() 函数。

让我们试试吧:

$status = htransaksi::where('User_ID',auth()->user()->id)->where('Status','Open')->count();

【讨论】:

  • 我明白了,但是如果购物车中有物品,请查找和在哪里做得很好。有什么建议/代码可以解决我的问题吗??
  • 这实际上是错误的where() 也是一个用于搜索可迭代对象的 PHP 函数。这就是为什么如果 htransaksi::find(auth()->user()->id) 不为空,代码可以工作的原因
  • @EricSugiharto 试试我的解决方案。相信老铁。 :)
  • 如果您只需要查询记录是否存在,您也可以链接exists() 而不是count()(它会指示查询构建器使用EXISTS 查询而不是COUNT )。该函数只会返回一个布尔值
【解决方案2】:
if(Auth::check()) {
  $status = htransaksi::where('user_id', Auth::id())->where('Status','Open')->count();
  ... your "normal logic"
} else {
  $error_handling_user_not_logged_in();
}

我添加 Auth::check() 检查的原因是为了确保用户真正登录,如果您因为中间件/请求验证而知道这一点,请免费提供删除它。

你的代码没有工作,因为 htransaksi::find(auth()->user()->id) 返回一个完成的数据集 - 如果这个数据集是空的 PHP 的 where() 函数失败,因为你试图搜索的东西为空

【讨论】:

  • 是的,已经检查过认证并且已经登录了。还是不行
  • @EricSugiharto 这不是我修复的本质,请仔细阅读我的代码,如果购物车为空,还有解决方案可以正确处理所有内容。
【解决方案3】:

问题出在这一行:

$status = htransaksi::find(auth()->user()->id)->where('Status','Open')->count();

如果htransaksi::find(auth()->user()->id) 返回null,那么您的代码将在null 上调用where,因此会出现错误:

在 null 上调用成员函数 where()

您可以简单地添加一个条件并单独执行:

$entryFound = htransaksi::find(auth()->user()->id);
if (empty($entryFound)) {
   //this means its returning null then handle that condition here
}

//if entry is found then leave the code as is:
$status = $entryFound->where('Status','Open')->count();

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2014-04-13
    • 2017-11-19
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多