Home > Software engineering >  Call to a member function count() on null
Call to a member function count() on null

Time:06-16

when I'm going to add data an error appears "Call to a member function count() on null"

View

                @foreach ($data as $row)
                <tr>
                  <td>{{ $row->costumer}}</td>
                  <td>{{ $row->vessel}}</td>
                  <td>{{ $row->scopejob}}</td>
                  <td>{{ $row->pergantian_sparepart}}</td>
                  <td>{{ $row->teknisi}}</td>
                  <td>{{ $row->tahun}}</td>
                  <td>{{ $row->keterangan}}</td>
                  <td>{{ $row->images->count()}}</td>
                  <td>{{ $row->files->count()}}</td>
                  <td>
                    <a href={{route('data.images',$row->id)}} type="button" >FOTO</a>
                    <a href={{route('data.files',$row->id)}} type="button" >FILE</a>
                    <a href="/show_rekap/{{ $row->id}}" >EDIT</a>
                    <a href="#"  data-id="{{ $row->id}}" data-costumer="{{ $row->costumer}}" >DELETE</a>
                  </td>
                </tr>
                @endforeach

Controller rekap

    public function insert_rekap(Request $request){
        // dd($request->all());
        $this -> validate($request,[
            'costumer'=>'required',
            'vessel'=>'required',
            'scopejob'=>'required',
            'pergantian_sparepart'=>'required',
            'teknisi'=>'required',
            'tahun'=>'required',
            'keterangan'=>'required'
        ]);
        $data = rekap::create($request->all());
        if($request->hasFile("images")){
            $images=$request->file("images");
            foreach($images as $image){
                $imageName=time().'_'.$image->getClientOriginalName();
                $request['rekap_id']=$data->id;
                $request['image']=$imageName;
                $image->move(public_path("/images_rekap"),$imageName);
                Image_rekap::create($request->all());

            }if($request->hasFile("files")){
                $files=$request->file("files");
                foreach($files as $file){
                    $fileName=time().'_'.$file->getClientOriginalName();
                    $request['rekap_file_id']=$data->id;
                    $request['file']=$fileName;
                    $file->move(\public_path("/rekap_file"),$fileName);
                    file_rekap::create($request->all());
                }
            }
        }
        return redirect()->route('rekap')->with('success','Data Berhasil Ditambahkan');
    }

but the data is successfully entered into the database, and what steps should I take to correct the error

CodePudding user response:

error tells you that images or files or both variables are null, looks like you don't use eager loading

quick and dirty way is to use optional helper

<td>{{ optional($row->images)->count()}}</td>
<td>{{ optional($row->files)->count()}}</td>

if you need only count then better approach is to use eloquent counting related models

// controller
$data = rekap::withCount(['images', 'files'])
  // other selecting rules
  //->where ...
  ->get();
return view('view_name', ['data'=>$data]);

now in every $row of $data you have fields images_count and files_count

<td>{{ $row->images_count }}</td>
<td>{{ $row->files_count }}</td>

also you can rename count variables like rekap::withCount(['images as imagesCount', 'files as filesCount'])

<td>{{ $row->imagesCount }}</td>
<td>{{ $row->filesCount }}</td>

CodePudding user response:

Try

<td>{{ $row->images ? $row->images->count() : '' }}</td>
  • Related