繁体   English   中英

Laravel从模型belongsToMany关系中获取结果回到控制器

[英]Laravel getting results from model belongsToMany relationship back to controller

我正在使用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 |
+----+----------------+

我在photos创建了一个belongsToMany关系,并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[C:\\kittens.jpg,C:\\puppies.jpg] ,但我不知道如何访问它。

另外,我可以使用以下方法在视图中“排序”:

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

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

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

使用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

在您的控制器中尝试以下操作:

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

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

这里的PhotoSet是photo_set表的模型,因为它是数据透视表,我们将能够从中访问set和photos表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM