dangelsaurus
dangelsaurus

Reputation: 7562

Laravel getting results from model belongsToMany relationship back to controller

I'm using Laravel 5 and Eloquent, I have 3 tables setup:

photos
+----+---------------+------------------+
| id |  photo_name   |  photo_location  |
+----+---------------+------------------+
|  1 | kittens.jpg   | C:\kittens.jpg   |
|  2 | puppies.jpg   | C:\puppies.jpg   |
|  3 | airplanes.jpg | C:\airplanes.jpg |
|  4 | trains.jpg    | C:\trains.jpg    |
+----+---------------+------------------+

photo_set (pivot table)
+------------+----------+
| set_id     | photo_id |
+------------+----------+
|          1 |        1 |
|          1 |        2 |
|          2 |        3 |
|          2 |        4 |
+------------+----------+

sets
+----+----------------+
| id |  description   |
+----+----------------+
|  1 | cute animals   |
|  2 | transportation |
+----+----------------+

I created a belongsToMany relationship in my photos and sets models to link these two together.

class Photo extends Model {

    public function sets()
    {
        return $this->belongsToMany('App\Set');
    }
}

and

class Set extends Model {

    public function photos()
    {
        return $this->belongsToMany('App\Photo');
    }

}

However I'm trying to reference the $Sets->photos() model function in my controller, so that given a set of id=1, I can return the photo_location value for each row [C:\kittens.jpg,C:\puppies.jpg], but I don't know how to access it..

Also, I can "sort of" access this information in the view with:

@foreach($sets as $set)
    {{$set->images}}
@endforeach

but it looks like it only iterates through once and returns a json (?) of the necessary information, though I'm not sure how to parse that to regular HTML either.

So in short, I'm having trouble accessing this data (photo_location) from both the controller and the view

Upvotes: 1

Views: 2589

Answers (2)

wiseodd
wiseodd

Reputation: 163

Use Collection::lists()

$locations = Set::find(1)->photos->lists('photo_location');

It will return an array ['C:\kittens.jpg', 'C:\puppies.jpg']

http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_lists

Upvotes: 1

Khan Shahrukh
Khan Shahrukh

Reputation: 6411

In your controller try this :

$result = PhotoSet::where('set_id', $set_id)
          ->with('sets')
          ->with('photos')
          ->get();

$photo_location = $result->photos->photo_location;

here PhotoSet is the model for photo_set table, because it is a pivot table we will be able to access both sets and photos table from it.

Upvotes: 0

Related Questions