Laravel 使用多对多关系获取中间表数据

huangapple go评论100阅读模式
英文:

Laravel fetch intermediate table data with many to many relationship

问题

我有3张表
user, specialities和results

results表包含specialitie_id和user_id

我已经创建了多对多关系

以下是user模型中的关系

  1. public function specialities()
  2. {
  3. return $this->belongsToMany(Speciality::class, 'results', 'user_id', 'specialitie_id')->withPivot('result', 'color');
  4. }

我想要根据specialitie_id从结果表中获取数据

如果我的URL是
abc.com/result/5

我也附上了表结构
Laravel 使用多对多关系获取中间表数据

它应该显示与specialitie_id 5相关的结果
我尝试过这个但不起作用

  1. $result = User::with('specialities')->where('id', 5)->get();

任何帮助都将不胜感激。

英文:

I have 3 tables
user, specialities & results

results contain specialitie_id, user_id

I have create many-to-many relationship

Here's the relationship in user model

  1. public function specialities()
  2. {
  3. return $this->belongsToMany(Speciality::class, 'results', 'user_id', 'specialitie_id')->withPivot('result', 'color');
  4. }

I want to fetch data from the result table based on specialitie_id

If my url is
abc.com/result/5

I have attached table structure as well,
Laravel 使用多对多关系获取中间表数据

it should show me result related to specialitie_id 5
I tried this but it doesn't work

  1. $result = User::with('specialities')->where('id', 5)->get();

Any help would be appreciated.

答案1

得分: 2

$result = User::with('specialities')->where('id', 5)->get();

说,给我所有的结果,其中 用户ID = 5,与之相关的 所有特长。


你很接近,但是把它搞反了:

  1. // 给我所有 SPECIALITY_ID = 5 的结果
  2. // 与其相关的所有用户
  3. $result = Speciality::with('users')->where('id', 5)->get();

请注意上面的结果是一个数组

控制器函数示例:

  1. public function results($id){
  2. $results = Speciality::with('users')->where('id', $id)->get();
  3. return view('user_specialities', compact('results'));
  4. }

示例视图 user_specialities

  1. @foreach($results as $result)
  2. <p>结果:{{$result->result}}</p>
  3. <p>表单:{{$result->formulary}}</p>
  4. <p>颜色:{{$result->color}}</p>
  5. <p>用户ID:{{$result->user->id}}</p>
  6. <p>用户名:{{$result->user->name}}</p>
  7. @endforeach

Speciality 模型:

  1. public function users()
  2. {
  3. return $this->belongsToMany(User::class, 'results', 'specialitie_id', 'user_id')->withPivot('result', 'color');
  4. }

User 模型:

  1. public function specialities()
  2. {
  3. return $this->belongsToMany(Speciality::class, 'results', 'user_id', 'specialitie_id')->withPivot('result', 'color');
  4. }
英文:

Your current query:

  1. $result = User::with(&#39;specialities&#39;)-&gt;where(&#39;id&#39;, 5)-&gt;get();

> Is saying, give me all results where the USER_ID = 5 WITH all the specialities related to it.


You are very close but did it backwards:

  1. //Give me all results where the SPECIALITY_ID = 5
  2. //WITH all the users related to it
  3. $result = Speciality::with(&#39;users&#39;)-&gt;where(&#39;id&#39;, 5)-&gt;get();

> Please note that the above is an array

Example of a Controller Function:

  1. public function results($id){
  2. $results = Speciality::with(&#39;users&#39;)-&gt;where(&#39;id&#39;, $id)-&gt;get();
  3. return view(&#39;user_specialities&#39;, compact(&#39;results&#39;));
  4. }

Example view user_specialities:

  1. @foreach($results as $result)
  2. &lt;p&gt;Result: {{$result-&gt;result}}&lt;/p&gt;
  3. &lt;p&gt;Formulary: {{$result-&gt;formulary}}&lt;/p&gt;
  4. &lt;p&gt;Color: {{$result-&gt;color}}&lt;/p&gt;
  5. &lt;p&gt;User ID: {{$result-&gt;user-&gt;id}}&lt;/p&gt;
  6. &lt;p&gt;User Name: {{$result-&gt;user-&gt;name}}&lt;/p&gt;
  7. @endforeach

Speciality Model:

  1. public function users()
  2. {
  3. return $this-&gt;belongsToMany(User::class, &#39;results&#39;, &#39;specialitie_id&#39;, &#39;user_id&#39;)-&gt;withPivot(&#39;result&#39;, &#39;color&#39;);
  4. }

User Model:

  1. public function specialities()
  2. {
  3. return $this-&gt;belongsToMany(Speciality::class, &#39;results&#39;, &#39;user_id&#39;, &#39;specialitie_id&#39;)-&gt;withPivot(&#39;result&#39;, &#39;color&#39;);
  4. }

huangapple
  • 本文由 发表于 2023年1月9日 18:47:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/75056160.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定