count (): параметр должен быть массивом или объектом, который реализует Countable в laravel - PullRequest
0 голосов
/ 10 января 2020

, пожалуйста, помогите мне решить эту проблему, когда я запускаю этот код, возникает ошибка count (): параметр должен быть массивом или объектом, который реализует Countable, когда я хочу получить no_st

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;
    }

Ответы [ 3 ]

1 голос
/ 10 января 2020

Вы пытаетесь посчитать данные типа объекта, но вы сможете только посчитать массив. Если вы все еще хотите посчитать свойства объекта, вы можете просто привести этот объект к массиву. Например:

count((array) $no_org);

Это вернет общее количество свойств $ no_org;

0 голосов
/ 10 января 2020

Согласно сообщению об ошибке, вы count() что-то, что не может реализовать Countable.

->first() вернет объект, который не может реализовать счетное.

->get() вернет коллекция, которая может быть исчисляемой.

Однако вам просто нужно найти один объект organisasi, поэтому вы можете просто использовать empty() как:

empty($no_org)
0 голосов
/ 10 января 2020

Это из-за используемой версии PHP и версии Laravel.

Чтение здесь

Вы можете превратить свой результат в массив.

$no_org = ( count((array)$no_org)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...