首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel雄辩的ORM中基于多到多关系从数据库中获取数据

如何在Laravel雄辩的ORM中基于多到多关系从数据库中获取数据
EN

Stack Overflow用户
提问于 2020-01-15 14:01:21
回答 2查看 78关注 0票数 0

我有两个模特:

代码语言:javascript
运行
复制
class Musician extends Model
{
    public function instruments()
    {
        return $this->belongsToMany('App\Instrument', 'musicians_instruments');
    }

}

代码语言:javascript
运行
复制
class Instrument extends Model
{
    public function musicians()
    {
        return $this->belongsToMany('App\Musician', 'musicians_instruments');

    }
}

保存到数据库可以正常工作,就像我想要的那样。我在数据库中有三个表:

代码语言:javascript
运行
复制
musicians
instruments
musicians_instruments (pivot table)

文书-举例内容:

代码语言:javascript
运行
复制
id   name
1    guitar
2    piano
3    keyboard
4    DJ

当音乐家注册时,他可以从1到3种乐器中选择演奏。例如,当他选择枢轴表中的吉他(1)和键盘(3)时,我们有(假设音乐家有id 2):

musicians_instruments

代码语言:javascript
运行
复制
musician_id   instrument_id
2             1
2             3

我的问题是-请帮助我如何写查询,以获得所有的乐器,音乐家演奏。如果乔选择1,3,如何取下他所选择的所有乐器的名称。

以下- MusicianController:

代码语言:javascript
运行
复制
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Musician;

use Illuminate\Support\Facades\Hash;

class MusicianController extends Controller
{

    public function index()
    {
        $musicians = Musician::all(); // it's for other musicians data


        $musician = Musician::with('instruments')->find($musician_id);

        return view('musicians', compact('musicians', 'musician'));
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-15 14:41:50

关于索引页(所有音乐家及其乐器的列表):

Controller中使用以下代码:

代码语言:javascript
运行
复制
public function index()
{
    $musicians = App\Musician::with('instruments')->get();
    return view('musicians', compact('musicians', 'musicians'));
}

视图中,使用以下代码:

代码语言:javascript
运行
复制
 @foreach($musicians as $musician)
    {{ $musician->name; }}
    <ul>
      @foreach ($musician->instruments as $instrument)
        <li>{{ $instrument->name }}<br></li>
      @endforeach
    </ul>
 @endforeach

对于配置文件页(特定音乐家的页面id = musician_id及其乐器):

Controller中使用以下代码:

代码语言:javascript
运行
复制
$musician = App\Musician::where("id",$musician_id)->with('instruments')->first();
return view('your/view/file', ['musician'=> $musician]);

视图中,使用以下代码:

代码语言:javascript
运行
复制
{{ $musician->name }}
@foreach($musician->instruments as $instrument)
    {{ $instrument->name; }}<br>
@endforeach

欲了解更多细节,请访问:https://laravel.com/docs/6.x/eloquent-relationships

票数 0
EN

Stack Overflow用户

发布于 2020-01-15 14:16:27

您可以通过简单地使用您在各自模型中定义的方法来获得每个音乐家的乐器:

代码语言:javascript
运行
复制
$musician = App\Musician::find($musician_id);

$instruments = $musician->instruments()->get();

foreach($instruments as $instrument) {
    // $instrument->name;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59752999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档