Przemek Wojtas
Przemek Wojtas

Reputation: 1371

Laravel eloquent property doesn't exist in this collection

I have business and address table as well as pivot table.

When user clicks on the business they want to view it searches for business id and using the id I want to get details of addresses it belongs to. so I have something like this:

public function displayBusiness($id) {
    /*
    $business = Business::with('addresses')->find($id);
    $session = session()->put('key', $id);
    $gallery = Gallery::where('business_id', $id)->get();
    $location = Location::where('business_id', $id)->get();
    $review = Review::where('business_id', $id)->get();
        return view('displayBusiness', compact('business', 'address', 'gallery', 'location', 'review', 'items'));

}

My business model:

public function addresses()
{
    return $this->belongsToMany('App\Address', 'business_address', 'business_id', 'address_id');
}

address model:

public function businesses()
{
    return $this->belongsToMany('App\Business', 'business_address', 'business_id', 'address_id');
}

and in my view:

<div class="container container2">
        <div id="left" class="logo2">
        <img class="images" id="image" src="{{ asset($business->image) }}" />
            <form class="upload_form" action="{{ action('ImageController@image') }}" enctype="multipart/form-data" role="form" method="POST">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <input style="width: 100%;height: 100%; opacity: 0;" name="img" id="img" class="img" data-input="false" type="file" data-buttonText="Upload Logo" data-size="sm" data-badge="false" onchange="submitImage();" />
                </form>
        </div>
<!-- Business Information -->
        <div class="info sortable">
        <input type="hidden" name="id" value="{{$business->id}}"/>

            <p>{{$business->name}}</p>
            <p>{{$business->email}}</p>
            <p>{{$business->addresses->firstline_address}}</p>
            <p>{{$business->addresses->secondline_address}}</p>
            <p>{{$business->addresses->town}}</p>
            <p>{{$business->addresses->city}}</p>
            <p>{{$business->addresses->postcode}}</p>
            <p>{{$business->addresses->telephone}}</p>
        </div>

However I get an error:

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

How can this be solved?

Upvotes: 0

Views: 1148

Answers (3)

Mathieu Ferre
Mathieu Ferre

Reputation: 4412

You can't do $business->addresses->firstline_addressbecause $business->addresses is a collection of adresses, not a single object

You have 2 options :

option 1 : foreach loop :

@forelse({{$business->addresses as $adresse)
    <p>{{$adresse->firstline_address}}</p>
        <p>{{$adresse->secondline_address}}</p>
        <p>{{$adresse->town}}</p>
        <p>{{$adresse->city}}</p>
        <p>{{$adresse->postcode}}</p>
        <p>{{$$adresse->telephone}}</p>
@empty
    <p> No Adresses </p>
@endforelse

option 2 : You only want the first adresse

        <p>{{$business->name}}</p>
        <p>{{$business->email}}</p>
        <p>{{$business->addresses->first()->firstline_address}}</p>
        <p>{{$business->addresses->first()->secondline_address}}</p>
        <p>{{$business->addresses->first()->town}}</p>
        <p>{{$business->addresses->first()->city}}</p>
        <p>{{$business->addresses->first()->postcode}}</p>
        <p>{{$business->addresses->first()->telephone}}</p>

Upvotes: 0

Carlos Mora
Carlos Mora

Reputation: 1184

Given addresses - business is a ManyToMany relation, addresses is a collection, so please try doing

@foreach( $business->addresses as $address )
   <p>{{$address->firstline_address}}</p>
   .....
@endforeach

Upvotes: 1

Kuru
Kuru

Reputation: 738

Try like this

$business->addresses()->value('firstline_address');

Upvotes: 1

Related Questions