Как определить это отношение hasManyThrough? - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть следующие модели.Event принадлежит Casefile.Casefile и User - это многие ко многим.

class Casefile extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class)->withTimestamps();
    }

    public function events()
    {
        return $this->morphMany('App\Event', 'casefile');
    }
}

class User extends Authenticatable
{
    public function casefiles()
    {
        return $this->belongsToMany(Casefile::class)->withTimestamps();
    }
}

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

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

Когда я пытаюсь:

App\Event::find(526)->users()->get();

Это дает:

Осветить/ Database / QueryException с сообщением 'SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец' casefiles.event_id 'в' списке полей '(SQL: выберите users. *, casefiles. event_id из usersвнутреннее соединение casefiles on casefiles. id = users. casefile_id где casefiles. event_id = 526) '

Как определить "* 1028"* имеет много User s "отношение через Casefile?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Здесь невозможно использовать HasManyThrough без сводной модели для таблицы casefile_user.

Вместо этого вы можете определить BelongsToMany отношение:

public function users()
{
    return $this->belongsToMany('App\User', 'casefile_user', 'casefile_id', null, 'casefile_id');
}
0 голосов
/ 03 апреля 2019

Если вы не следовали соглашению об именовании столбцов для имени столбца. Затем вы можете указать название вашего столбца, как это

public function users()
    {
        return $this->hasManyThrough(
            'App\User',
            'App\Casefile',
            'event_id', // Foreign key on casefiles table...
            'user_id', // Foreign key on users table...
        );
    }

Для более Laravel HasManyThrough Relationship

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