在 null 上调用成员函数 - 从多对多关系中检索数据

时间:2021-05-06 11:56:40

标签: php laravel

这个问题很常见,但我不知道怎么做。

代码如下:

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 没有按照我的预期工作,所以这不起作用。

我的想法好吗?如果是这样,我的代码应该如何查找?

带有错误信息的照片: click

多对多表迁移:

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

1 个答案:

答案 0 :(得分:1)

您可以使用关系简单地从 Materii 中获取所有 Student

$materii = $student->domeniu->materiiLegate;