我知道该问题已得到多次答复,但由于某种原因,无论如何我都无法使其适用于我的桌子,而且我不明白为什么。
我已经尝试了大约 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 中的一些数据的多对多关系。
答案 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
]);
}