哪里有多种关系 - laravel 5.4

时间:2017-05-19 12:04:34

标签: php laravel-5 foreign-keys

我有多张桌子。

巡回赛表

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.idinclusion.tour_id等于tour.idexclusion.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);
    }

1 个答案:

答案 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;