Home > Mobile >  get access to collection laravel
get access to collection laravel

Time:06-02

I am a new learner of the laravel framework working on 3 models customer, accidents, License where the relations are as follows:

public  function License()
        {
            return $this->hasOne(license::class,'driver_id');
        }

    public function cars()
        {
            return $this->hasMany(car::class);
        }

In the controller I do like this:

public function AdminCustomers()
    {
        $customers = Customer::with('cars')->with('License')->get();
        return view('admin.AdminCustomers',compact('customers'));
    }

now I want to display all 3 models' data on view.blade page

<tbody>
                    @foreach($customers as $customer)

                                    <tr>
                                        <td>{{$customer->id}}</td>
                                        <td>{{$customer->name}}</td>
                                        <td>{{$customer->adderss}}</td>
                                        <td>{{$customer->mobileNo}}</td>
                                        <th>{{$customer->License->id}}</th>
                                        <th>{{$customer->License->Exp}}</th>
                                        <td>{{$customer->cars->id}}</td>
                                        <td>{{$customer->cars->color}}</td>
                                        <td>{{$customer->cars->model_no}}</td>
                                        <td>{{$customer->cars->company}}</td>
                                    </tr>
                               
                    @endforeach
                    </tbody>

But it doesn't work and I didn't know where is the problem the error Exception

Property [id] does not exist on this collection instance.

CodePudding user response:

$customer->cars will return a collection as the relationship is hasMany so you need to loop over the collection in the view

@foreach($customers as $customer)

    <tr>
        <td>{{$customer->id}}</td>
        <td>{{$customer->name}}</td>
        <td>{{$customer->adderss}}</td>
        <td>{{$customer->mobileNo}}</td>
        <th>{{$customer->License->id}}</th>
        <th>{{$customer->License->Exp}}</th>
            @foreach($customer->cars as $car)
                <td>{{$car->id}}</td>
                <td>{{$car->color}}</td>
                <td>{{$car->model_no}}</td>
                <td>{{$car->company}}</td>
            @endforeach
    </tr>
                               
@endforeach

CodePudding user response:

check the name in the corrisponding table on db, and if its different from "id" specify it into the model, as

protected $primaryKey = 'xxx';
  • Related