count():参数必须是数组或者是laravel中实现Countable的对象

Posted

技术标签:

【中文标题】count():参数必须是数组或者是laravel中实现Countable的对象【英文标题】:count(): Parameter must be an array or an object that implements Countable in laravel 【发布时间】:2020-04-27 16:34:10 【问题描述】:

请帮我解决这个问题,当我运行这段代码时,出现错误count():当我想获取no_st时,参数必须是数组或者实现了Countable的对象

public function get_no_st(Request $request)

        $no_org = null;
        $tgl    = $request->tgl ?: date('Y-m-d');
        $tgl    = Helper::saveDateIndo( $tgl );
        $max_no_st = $request->max_no_st ?: null;

        if ( $request->org == 'KPA')
            $no_org = 'KPA.MBU';
        else if ( $request->an ) 
            $no_org = $this->organisasi->select('kode_surat_atas_nama', 'kode_surat')->where('id', $request->org)->first();
            $no_org = ( count($no_org) > 0
                        ? ( trim($no_org->kode_surat_atas_nama) != null ? $no_org->kode_surat_atas_nama : $no_org->kode_surat )
                        : @$no_org->kode_surat );
         else 
            $no_org = $this->organisasi->select('kode_surat')->where('id', $request->org)->first();
            $no_org = (count($no_org) > 0 ? $no_org->kode_surat : null);
        

        if(!$max_no_st) 
            $max_no_st = $this->model->select('no_st_increment');
            if ( $request->org == 'KPA') 
                $max_no_st = $max_no_st->where('is_kpa', true);
             else 
                $max_no_st = $max_no_st->where('pt_organisasi_id', $request->org);
            
            if ( $tgl )
            
                $max_no_st  = $max_no_st->where(DB::raw('EXTRACT( YEAR FROM tgl_awal )'), date('Y', strtotime($tgl)) );
            
            $max_no_st  = $max_no_st->max('no_st_increment') + 1;
        

        $no_st      = 'ST-'.$max_no_st.'/'.($no_org ?: '-').'/'.date('n/Y', strtotime( $tgl ));

        return $no_st;
    

【问题讨论】:

$no_org 不是集合或数组。这是一个单一的对象。你不能数一个物体。从您的代码的外观来看,我猜您正在尝试检查 $this->organisasi->select('kode_surat_atas_nama', 'kode_surat')->where('id', $request->org)->first(); 是否返回结果。 我正在堆砌它,如果你解决了这个问题,请帮助我 【参考方案1】:

您正在尝试计算一个对象类型的数据,但您只能计算一个数组。 如果您仍想计算对象的属性,您可以简单地将对象转换为数组。 像这样:

count((array) $no_org);

这将返回 $no_org 的属性总数;

【讨论】:

【参考方案2】:

根据报错信息,你是count() 不能实现Countable的东西。

->first() 将返回一个无法实现可数的对象。

->get() 将返回一个可数的集合。

但是你只需要找到 organisasi 的一个对象,所以 你可以使用empty() 喜欢:

empty($no_org)

【讨论】:

你也可以使用is_object($no_org)【参考方案3】:

这是因为你使用的是 php 版本和 Laravel 版本。

阅读here

你可以把你的结果变成数组。

$no_org = ( count((array)$no_org)
...

【讨论】:

以上是关于count():参数必须是数组或者是laravel中实现Countable的对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到错误count():参数必须是在laravel中实现Countable的数组或对象?

Drupal:count():参数必须是数组或者实现了Countable的对象

搜索框count():参数必须是数组或者实现了Countable的对象

yii2 gridview count():参数必须是实现Countable php 7.2的数组或者对象

Guzzle Error count():参数必须是数组或者实现了Countable的对象

PHP count():参数必须是数组或者实现了Countable的对象