繁体   English   中英

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

[英]Retrieve data from many to many relationship in Laravel

我知道这个问题已被多次回答,但由于某种原因,无论如何我都无法让它适用于我的桌子,而且我不明白为什么。

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

所以这是我的两个模型的函数:

指挥博士

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

多美纽博士

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

和profesor_domeniu 模式:

<?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');
    }
}

在我的 controller 中,我尝试了很多方法,例如,像这样:

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

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

但它仍然不起作用。

使用给定的 $id,我想从 profesor_domeniu 中检索所有数据,其中 profesor_id == $id。 就是这样,但我无法得到它。

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

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

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

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

//编辑2:

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

//编辑3:

我与一些数据的多对多关系添加到 pivot 表 profesor_domeniu 中。

点击

急切地将您的关系加载到您的 model 上:

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

       $materii = $conducatorDoctorat->materii;

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

您也可以只请求与您的 conducatorDoctorat 相关的材料:

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
        ]);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM