[英]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.