Laravel如何查询透视表?

Laravel how to query pivot table?


Laravel如何查询透视表? 已获得1个解决方法 2020-08-19 07:09:14 php

我有三个模型:相册, 作者, 贡献

与专辑和作者有多对多的关系

// Album model

function authors()
{
  return $this->belongsToMany(Author::class);
}
// Author model

function albums()
{
  return $this->belongsToMany(Album::class);
}

与作者和贡献有多对多的关系.

一个作者可能对一张专辑有几个贡献.

// Author model

public function contributions()
{
  return $this->belongsToMany(Contribution::class)->withPivot('album_id');
}
// Contribution model
public function authors()
{
  return $this->belongsToMany(Author::class)->withPivot('album_id');
}

正如你所看到的,我使用一个额外的字段"Album_id"在透视表上的album_author.我试图用这个领域来获得给定专辑的作者的贡献.

在作者页面中,我想列出他的专辑和他的贡献 (每张专辑).

// Author controller
public function show($id)
{
  $author = Author::find($id);

  $albums = Album::whereHas('authors', function ($query) use ($id) {
      $query->where('authors.id', $id);
  })
      ->with('authors.contributions') // How to query the pivot "album_id" here ?
      ->get();

  return $albums;
}

如何检索当前作者对专辑的贡献?如何查询枢轴 “album_id”?


Laravel如何查询透视表? 方法1

你试过使用WherePivot:

 $albums = Album::whereHas('authors', function ($query) use ($id) {
      $query->where('authors.id', $id);
  })
      ->with(['authors.contributions'=>function($query)use($albumId){
      $query->wherePivot('album_id',albumId);}]) 
      ->get();

  return $albums;

.htaccess .net .net-core 2d 3d actions-on-google actionscript-3 activemq acumatica adobe-xd aframe ag-grid air airflow ajax akka alexa algorithm alignment allure amadeus amazon-cognito amazon-deequ amazon-dynamodb amazon-ec2 amazon-redshift amazon-s3 amazon-web-services amcharts amcharts4