Laravel将模型belongsToMany关系的结果返回到控制器

时间:2015-05-24 04:22:45

标签: php laravel eloquent laravel-5

我正在使用Laravel 5和Eloquent,我有3个表设置:

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 |
+----+----------------+

我在belongsToManyphotos模型中创建了sets关系,将这两者联系在一起。

class Photo extends Model {

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

class Set extends Model {

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

}

但是我试图在我的控制器中引用$Sets->photos()模型函数,因此给定一组id=1,我可以返回每行的photo_location值{{1但是我不知道如何访问它..

此外,我可以“在视图中”对“此类信息”进行“排序”:

[C:\kittens.jpg,C:\puppies.jpg]

但看起来它只迭代一次并返回必要信息的json(?),但我不知道如何将其解析为常规HTML。

简而言之,我无法从控制器和视图访问此数据(photo_location)

2 个答案:

答案 0 :(得分:1)

使用Collection::lists()

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

它将返回一个数组['C:\kittens.jpg', 'C:\puppies.jpg']

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

答案 1 :(得分:0)

在你的控制器中试试这个:

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

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

这里PhotoSet是photo_set表的模型,因为它是一个数据透视表,我们可以从中访问这两个集和照片表。