为了账号安全,请及时绑定邮箱和手机立即绑定

3个表多对多关系

3个表多对多关系

PHP
明月笑刀无情 2021-11-05 13:21:10
我正在 Laravel 中创建一个网站并遇到以下问题。我有三个表:User、JobOffer和Company 许多用户有很多工作机会。我在用户和 Joboffers 之间创建了一个多对多的关系。用户模型:return $this->belongsToMany('App\JobOffer')->withTimestamps();招聘模式:return $this->belongsToMany('App\User')->withTimestamps();但是问题是 Joboffers 表有一个列company_id(因为 Company 和 Joboffer 之间的关系)并且 Users-Joboffer 之间的关系返回了公司的 id。但是我想知道公司的名字。非常感谢!更新:我的模型:应用\用户.phppublic function job_offers(){    return $this->belongsToMany('App\JobOffer')->withTimestamps();}App\JobOffer.phppublic function users(){    return $this->belongsToMany('App\User')->withTimestamps();}public function company(){    return $this->belongsTo('App\Company');}应用\公司.phppublic function job_offers(){    return $this->hasMany('App\JobOffer');}用户IGP是对的。非常感谢IGP。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

在提供更多细节之前,我假设关系如下:

  • 用户模型和JobOffer模型具有 M:N 关系

  • 公司模型和JobOffer模型具有 1:M 关系

# App\User.php

public function job_offers()

{

    return $this->belongsToMany('App\JobOffer')->withTimestamps();

}

# App\JobOffer.php

public function users()

{

    return $this->belongsToMany('App\User')->withTimestamps();

}


public function company()

{

    return $this->belongsTo('App\Company');

}

# App\Company.php

public function job_offers()

{

    return $this->hasMany('App\JobOffer');

}

从这些关系中,您可以像这样获得公司名称:


use App\User;


$user = User::with('job_offers.company')->where(...)->first();

生成的对象将如下所示:


App\User {

  id: 1,

  created_at: "",

  updated_at: "",

  job_offers: Illuminate\Database\Eloquent\Collection {

    all: [

      App\JobOffer {

        id: 85,

        company_id: 36,

        created_at: "",

        updated_at: "",

        pivot: Illuminate\Database\Eloquent\Relations\Pivot {

          job_offer_id: 85,

          user_id: 1,

          created_at: "",

          updated_at: "",

        },

        company: App\Company {

          id: 36,

          name: "Company1"

          created_at: "",

          updated_at: "",

        },

      },

      App\JobOffer {

        id: 90,

        company_id: 44,

        created_at: "",

        updated_at: "",

        pivot: Illuminate\Database\Eloquent\Relations\Pivot {

          job_offer_id: 90,

          user_id: 1,

          created_at: "",

          updated_at: "",

        },

        company: App\Company {

          id: 44,

          name: "Company2"

          created_at: "",

          updated_at: "",

        },

      },

    ],

  },

}

您需要做的就是遍历用户的工作机会以获取每个公司名称。


@foreach($user->job_offers as $job_offer)

    Company name: {{ $job_offer->company->name }}

@endforeach


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信