在 Laravel 中从多对多关系中检索数据

时间:2021-04-15 11:45:42

标签: php laravel

我知道该问题已得到多次答复,但由于某种原因,无论如何我都无法使其适用于我的桌子,而且我不明白为什么。

我已经尝试了大约 4 个小时,但无法正确完成。

这里是我的两个模型的函数:

ConductorDoctorat

public function materii()
    {
        return $this->belongsToMany('App\DomeniuDoctorat', 'profesor_domeniu', 'domeniu_id', 'profesor_id');
    }

DomeniuDoctorat

public function materii()
    {
        return $this->belongsToMany('App\ConducatorDoctorat', 'profesor_domeniu', 'profesor_id', 'domeniu_id');
    }

和 profesor_domenu 架构:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class ProfesorDomeniu extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('profesor_domeniu', function (Blueprint $table) {
            $table->unsignedBigInteger('profesor_id');
            $table->unsignedBigInteger('domeniu_id');
            
            $table->foreign('profesor_id')
                  ->references('id')->on('conducatori_doctorat')
                  ->onDelete('cascade');
            $table->foreign('domeniu_id')
                  ->references('id')->on('domenii_doctorat')
                  ->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('profesor_domeniu');
    }
}

在我的控制器中,我尝试了很多方法来做到这一点,例如,像这样:

public function edit($id)
    {
        $materii = ConducatorDoctorat::findOrFail($id)->materii()->pluck('domeniu_id');

        return view('admin.conducatori_doctorat.edit')->with([
            'materii' => $materii
        ]);
    }

但是还是不行。

使用给定的 $id,我想从 profesor_domenu 中检索所有数据,其中 profesor_id == $id。 仅此而已,但我无法理解。

如何做到这一点,为什么我的方法不起作用?

//为清楚起见进行编辑:

conducator_doctorat 是存储教授的位置,而 domenii_doctorat 是存储他们的字段的位置。

在 profesor_domenu 中,我通过将 conducatori_doctorat 中的 id 链接到 domenii_doctorat 中的字段 id 来存储每位教授的教学内容。

//edit2:

materii() 表示他们教授的领域。

//edit3:

我与添加到数据透视表 profesor_domenu 中的一些数据的多对多关系。

click

1 个答案:

答案 0 :(得分:1)

渴望在你的模型上加载你的关系:

public function edit($id)
    {
        $conducatorDoctorat = ConducatorDoctorat::with('materii')->findOrFail($id);

       $materii = $conducatorDoctorat->materii;

        return view('admin.conducatori_doctorat.edit')->with([
            'materii' => $materii
        ]);
    }

您也可以只索取与您的导师博士相关的材料:

public function edit($id)
    {
       

       $materii = DomeniuDoctorat::whereHas('materii', function($query) use ($id){
             $query->where('id', $id);
       })->get();

        return view('admin.conducatori_doctorat.edit')->with([
            'materii' => $materii
        ]);
    }