Извлечение данных модели отношений - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть структура таблицы ниже

Users table
    id- integer
    name-string

Casefiles table
    id- integer
    user_id- foreign_key
    name-string

Followups table
    id- integer
    date- date
    casefile_id-foreign_key

Я использую приведенную ниже связь между этими моделями User.php

public function casefiles()
    {
      if ($this->hasRole(['sales_executive'])) {
        return Casefile::where('user_id', $this->id);
      }
    }

Casefile.php

public function user()
    {
      return $this->belongsTo('App\User');
    }

    public function followups()
    {
      return $this->hasMany('App\FollowUp');
    }

Followup.php

public function casefile()
    {
      return $this->belongsTo('App\Casefile');
    }

Я хочу получить наблюдения пользователей напрямую.Как я могу достичь этого?

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Изменение в модели User.php для связи с файлами дел и последующих действий:

public function casefiles()
{
  if ($this->hasRole(['sales_executive'])) {
    return $this->hasMany(Casefile::class);
  }
}

public function followups() {
    return $this->hasManyThrough(FollowUp::class, Casefile::class);
}
0 голосов
/ 18 апреля 2019

Это должно иметь место для HasManyThrough Отношения.

В вашем случае это должно быть

// Followups migration
Schema::create('followups', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->date('date');
    $table->unsignedBigInteger('casefile_id')->nullable();
    $table->timestamps();

    $table->foreign('casefile_id')
        ->references('id')
        ->on('casefiles');
});

// Casefile migration
Schema::create('casefiles', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->unsignedBigInteger('user_id')->nullable();
    $table->timestamps();

    $table->foreign('user_id')
       ->references('id')
       ->on('users');
});

// User.php

public function followups() {
    return $this->hasManyThrough(FollowUp::class, Casefile::class);
}

// YourController.php
$user = User::all()->first();
dd($user->followups);

0 голосов
/ 18 апреля 2019

вам нужно использовать hasManyThrough() в вашем User.php, вы можете добавить это,

 public function followUps()
 {
   return $this->hasManyThrough('App\FollowUp','App\Casefile');
 }

, тогда вы можете обычно вызывать последователей, используя User::with('followUps')->find(1)->followUps

Я заметил, чтовы проверяете роль в ваших отношениях $this->hasRole(['sales_executive'] это может произойти ошибка, поскольку вы не делаете, если утверждение неверно.Я думаю, что вы выберете другой подход и справитесь с этим.Для получения дополнительной информации о hasManyThrough предпочитаете эту ссылку

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