【问题标题】:How to get data from table related through pivot table?如何通过数据透视表从相关表中获取数据?
【发布时间】:2019-02-15 10:34:12
【问题描述】:

我有 4 个表:国家、活动、国家活动和包裹。 国家和活动通过数据透视表 country_activity 相关联,包与 country_activity 相关联。 现在,我如何预先加载与一个国家/地区的每个活动相关的所有包?

class Country extends Model
{
    public function activities() {
        return $this->belongsToMany('App\Models\Activity','country_activities')->using('App\Models\CountryActivity')->as('country_activities');
    }
}

class Activity extends Model
{
    public function countries() {
        return $this->belongsToMany('App\Models\Country','country_activities')->using('App\Models\CountryActivity')->as('country_activities');
    }
}

class Package extends Model
{
    public function country_activities() {
        return $this->belongsToMany('App\Models\CountryActivity');
    }
}

class CountryActivity extends Pivot
{
    protected $table = 'country_activities';

    public function packages() {
        return $this->hasMany('App\Models\Package');
    }
}

【问题讨论】:

    标签: laravel eloquent eager-loading eloquent-relationship


    【解决方案1】:

    所以,这对我有用。

       class Country extends Model
       {
            public function activities() {
            return $this->belongsToMany('App\Models\Activity','country_activities')->using('App\Models\CountryActivity')->withPivot(['id'])->as('country_activities');
       }
    

    现在,在我的控制器中,我这样做了

        $country = Country::with(['activities'=> function($q) {$q->where('name','Trekking');}])->where('name','Nepal')->first(['id','name']);
        $country->activities->map(function ($i){
            $i->country_activities->load('packages');
            return $i;
        });
    

    【讨论】:

      【解决方案2】:

      我在我从事的一个项目中做了类似的事情。我不确定它是否会起作用,但值得一试:

      $country = Country::find(1);
      $country->activities = $contry->activities()->get()->each(function ($i, $k){
          $i->packages = $i->pivot->packages;
          //$i->makeHidden('pivot'); -> This is useful if you want to hide the pivot table
      });
      var_dump($country);
      

      【讨论】:

        猜你喜欢
        • 2021-06-06
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 2021-01-23
        • 2021-04-29
        • 2021-09-10
        相关资源
        最近更新 更多