这个问题很常见,但我不知道怎么做。
代码如下:
public function index($id)
{
$student = Student::with('referat')->with('examen')->findOrFail($id);
$materii = Materie::find(1)->domeniu()->where('id_domeniu', $student->domeniu_doctorat_id)->pluck('id_domeniu');
dd($materii);
return view('admin.students.catalog.index')->with([
'student' => $student
]);
}
我在 index 函数中使用的 $id 是用户 ID。 现在我想检索所有链接到他们的领域(domeniu = 领域)的材料(材料 = 主题)。
例如,主题数学在科学领域。主题(materii)和 domenii(字段)存储在多对多中间表中,可以通过函数 domeniu() 访问该表
材料模型
public function domeniu()
{
return $this->belongsToMany(DomeniuDoctorat::class, 'materie_domeniu', 'id_materie', 'id_domeniu');
}
在上面的代码中,您可以看到我的方法 - 但我得到“在 null 上调用成员函数 domeniu()”,因为 find 不能按我想要的方式工作。
我的想法是通过查找获得所有科目(materii),然后使用domeniu()转到中间表,然后通过检查他们喜欢的领域(domeniu)找到学生感兴趣的科目.
但是因为 find 没有按照我的预期工作,所以这不起作用。
我的想法好吗?如果是这样,我的代码应该如何查找?
多对多表迁移:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMaterieDomeniu extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('materie_domeniu', function (Blueprint $table) {
$table->unsignedBigInteger('id_materie');
$table->unsignedBigInteger('id_domeniu');
$table->foreign('id_materie')
->references('id')
->on('materii')
->onDelete('cascade');
$table->foreign('id_domeniu')
->references('id')
->on('domenii_doctorat')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('materie_domeniu');
}
}
答案 0 :(得分:1)
您可以使用关系简单地从 Materii
中获取所有 Student
。
$materii = $student->domeniu->materiiLegate;