我对Eloquent
提出了一些问题我有一张包含很多照片的相册,每张照片都有标签。
我的模型看起来像
class Album extends Eloquent {
public function photo() {
return $this->hasMany('Photo','album_id')->select('url_thumb', 'url_natual', 'url_thumb_tiny');
}
}
class Photo extends Eloquent {
public function tags() {
return $this->hasMany('PhotoTags','photo_id')->select(array('x', 'y','width','height','msg'));
}
}
class PhotoTags extends Eloquent {
public function photo() {
return $this->belongsTo('Photo','photo_id');
}
}
我的控制器看起来像
class AlbumController extends Controller {
protected $data = [];
public function __construct() {
$this->data['item'] = Album::where('album_id', '=', $id)- >where('user_id','=',Auth::user()->user_id)->first();
}
public function managePhoto($id) {
print_r($this->data['item']->photo[0]); //it's works fine, i can get photos under the album
print_r($this->data['item']->photo[0]->tags); //i can't get tags of each photo
}
}
我怎样才能获得每张照片的标签?
答案 0 :(得分:0)
要获取每张照片的所有标签,您必须循环播放照片集。
$photos = $this->data['item']->photo;
$tags = new \Illuminate\Database\Eloquent\Collection;
foreach($photos as $photo){
$tags = $tags->merge($photo->tags);
}
在这个例子中,我使用的是Eloquent Collection,因为结果($ photo->标签)也是一个集合。如果你对此更加满意,你也可以使用数组。
并且不要忘记eager load您的关系,否则将为集合中的每个模型查询数据库。
Album::where('album_id', '=', $id)
->where('user_id','=',Auth::user()->user_id)
->with('tags')
->first();
答案 1 :(得分:0)
这是因为相册模型 我错过了选择photo_id
所以我改变了下面的模型代码,这是有效的。
class Album extends Eloquent {
public function photo() {
return $this->hasMany('Photo','album_id')->select('photo_id','url_thumb', 'url_natual', 'url_thumb_tiny');
}
}