我有多张桌子。
巡回赛表
id | title | slug .....
图像表
id | tour_id | image.....
包含表
id | tour_id | inclusion....
排除表
id | tour_id | exclusion...
Itenary Table
id | tour_id | day_summary.....
Tour_User表(This is a pivot table between tour table and user table)
tour_id | user_id
我需要
我希望通过image, inclusion, exclusion, itenary, tour user
获取导览详细信息,其中image.tour_id
等于tour.id
,inclusion.tour_id
等于tour.id
,exclusion.tour_id
等于{{1}等等。
我已将tour.id
中的关系定义为
Tour Model
我知道这可以通过循环和条件语句来完成,我们需要多次查询数据库,但是我希望通过在Laravel 5.4中用eloquent的eager加载来实现它我如何实现它。 https://stackoverflow.com/a/21380265/4807414这似乎有一些类似的问题,但无法解决。
我尝试过类似的事情:
public function user() {
return $this->hasOne(TourUser::class);
}
public function image() {
return $this->hasMany(TourImage::class);
}
public function inclusion() {
return $this->hasMany(TourInclusion::class);
}
public function exclusion() {
return $this->hasMany(TourExclusion::class);
}
public function highlight() {
return $this->hasMany(TourHighlight::class);
}
public function itenary() {
return $this->hasMany(TourItenary::class);
}
答案 0 :(得分:0)
你不能在Laravel上做类似的事情因为关系是Has Many
你应该这样做:
$tour = Tour::where('slug', $slug)
->whereHas('user', function($query) {
$query->where('user_id', user()->id);
}) <-- user() defind in helper function for logged in user detail
->whereHas('itenary', function($query) {
$query->where('tour_id', '21');
}) <-- pass tour id
->whereHas('inclusion', function($query) {
$query->where('tour_id', '21');
}) <-- pass tour id
->first();
$images = $tour->image;
$inclusions = $tour->inclusion;
$exclusions = $tour->exclusion;
$highlights = $tour->highlight;
$itenaries = $tour->itenary;