Красноречивая проблема отношений: принадлежит - PullRequest
1 голос
/ 22 марта 2020

Я новичок с Laravel.

У меня есть эти модели:

  • Модальность,
  • ReportsGroup,
  • Отчет,
  • Пользователь

По сути, я пытаюсь построить некоторые отношения:

- Группа отчетов принадлежит Модальности,

- Модальность имеет много групп отчетов,

- Группа отчетов имеет много отчетов,

- Отчет принадлежит ReportsGroup,

- у отчета есть один пользователь,

- у пользователя много отчетов.

( жирным шрифтом обозначены отношения, которых я не могу достичь ...)

МОДЕЛЬ:

Modality.php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Modality extends Model
    {
        public function reportGroups()
        {
          $this->hasMany(ReportsGroup::class);
        }
    }

ReportsGroup. php:

namespace App;

use Illuminate\Database\Eloquent\Model;

class ReportsGroup extends Model
{
  public function modality()
  {
    return $this->belongsTo(Modality::class);
  }
  public function reports()
  {
    return $this->hasMany(Report::class);
  }
}

Отчет. php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Report extends Model
{
    public function author()
    {
      return $this->belongsTo(User::class, 'author_id');
    }
    public function reportsGroup()
    {
      return $this->belongsTo(ReportsGroup::class, 'reportsGroup_id');
    }
}

МИГРАЦИИ:

Модальности таблицы:

public function up()
    {
        Schema::create('modalities', function (Blueprint $table) {
            $table->id();
            $table->string('title')->nullable();
            $table->text('description')->nullable();
            $table->boolean('is_active')->default(true);
            $table->boolean('is_free')->default(true);
            $table->timestamps();
        });
    }

Таблица отчетовГруппы:

public function up()
{
  Schema::create('reports_groups', function (Blueprint $table) {
      $table->id();
      $table->unsignedBigInteger('modality_id');
      $table->string('title');
      $table->text('description')->nullable();
      $table->timestamps();
  });
}

Таблица отчетов

  public function up()
    {
        Schema::create('reports', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('reportsGroup_id');
            $table->string('title');
            $table->text('indication')->nullable();
            $table->text('technique')->nullable();
            $table->text('conclusion')->nullable();
            $table->text('recommandations')->nullable();
            $table->unsignedBigInteger('author_id');
            $table->boolean('is_visible')->defaut(true);
            $table->boolean('is_free')->default(true);
            $table->timestamps();

            $table->index('reportsGroup_id');
            $table->index('author_id');
        });
    }

Пользователи таблиц:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

Как я уже писал, единственная связь, которая работает, - это то, что репо rtsGrouop принадлежит Модальности ...

Прошло много дней, я застрял с этой проблемой ...

Пожалуйста, помогите! Спасибо,

Николас

1 Ответ

2 голосов
/ 22 марта 2020

Добавление идентификатора ссылки, например

$table->unsignedBigInteger('modality_id');

, недостаточно. Вы также должны добавить внешний ключ:

$table->foreign('modality_id')->references('id')->on('modalities');

https://laravel.com/docs/6.x/migrations#foreign -key-constraints

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...