Laravel Отношения 3 Модели

у меня есть 3 модели User, Campus, UserStatus. Структура такая:

Campus
 - id
 - name
User
 - id
 - name
UserStatus
 - id
 - admission_date
 - current_status
 - user_id
 - campus_id

Я хотел бы знать, сколько пользователей в конкретном кампусе. Это то, что я сделал до сих пор.
User.php

public function UserStatus()
    {
        return $this->hasOne('App\Models\UserStatus' , 'user_id');
    }

Кампус.php

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

UserStatus.php

public function User()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
public function Campus()
    {
        return $this->belongsTo('App\Models\Campus', 'campus_id');
    }

каковы будут отношения кампуса с пользователем?


person mpixelz    schedule 11.11.2019    source источник
comment
Я знаю, что это на самом деле не отвечает на ваш вопрос, но просто любопытно: почему есть таблица User и UserStatus? Похоже, что все они относятся к одному пользователю, поэтому не могли бы они все попасть в таблицу User?   -  person Brian Thompson    schedule 12.11.2019
comment
Я просто показываю здесь соответствующую информацию. В этих таблицах так много других столбцов. Мне пришлось разделить их из-за некоторых других отношений. Короче говоря, это было своего рода требованием в то время.   -  person mpixelz    schedule 12.11.2019
comment
Итак, чтобы уточнить, пользователь принадлежит к одному кампусу, а в кампусе много пользователей, верно?   -  person Brian Thompson    schedule 12.11.2019
comment
Да, это правильно   -  person mpixelz    schedule 12.11.2019


Ответы (3)


Вы можете использовать отношение «многие через».

Пожалуйста, проверьте следующий URL.

https://laravel.com/docs/5.8/eloquent-relationships#has-many-through

person Darany Khiev    schedule 11.11.2019
comment
В документе предлагается `идентификатор страны - целочисленное имя - строковый идентификатор пользователя - целое число country_id - целочисленное имя - строковый идентификатор сообщения - целое число user_id - целочисленное название - строка `, где, поскольку у меня нет столбца отношения на моей второй модели ... оба ключа находятся в одном модель - person mpixelz; 12.11.2019
comment
вы можете использовать только UserStatus::where('campus_id', $particular_campus_id)-›count(); - person Darany Khiev; 12.11.2019
comment
так что нет никакого способа получить доступ к $campus-›user-›count();? - person mpixelz; 12.11.2019
comment
Я думаю, что для этого нет необходимости использовать отношения. Почему? В UserStatus есть и user_id, и campus_id. Таким образом, вы можете получить счет в этой таблице. - person Darany Khiev; 12.11.2019

Вы можете использовать ownToMany

Я думаю, что у вас есть такая же проблема, как эта, и он решает ее, используя ownToMany и "with" в запросе с красноречивым Переполнение стека — подсчет отношения "многие ко многим"

person Pablo Salazar    schedule 11.11.2019
comment
Это также не решено ... Я также хочу вернуть всех пользователей для определенного кампуса ... так как мне также понадобится другая информация от них. - person mpixelz; 12.11.2019
comment
я думаю, что вы можете запросить UserStatus::where('campus_id',$campusId)->get(); а затем вы можете перебрать каждую строку с помощью (каждого), а затем использовать модель, чтобы получить имя пользователя и сохранить его в коллекции или массиве. - person Pablo Salazar; 12.11.2019
comment
я хочу знать, какую версию laravel вы используете в первую очередь. - person Philibert Kindy; 12.11.2019
comment
Я использую ларавель 5.8 - person mpixelz; 12.11.2019

Вместо этого я использовал функцию:

public function User()
    {
        $users = \App\User::whereHas('UserStatus', function($q){
            $q->where('campus_id', $this->id);
        });
        return $users;
    }

сработало для меня .. Я надеялся, что вместо этого есть лучший способ установить отношения. но пока работает. Спасибо.

person mpixelz    schedule 12.11.2019