Вложенные отношения Laravel - PullRequest
0 голосов
/ 16 февраля 2019

У пользователя может быть много устройств, и у каждого устройства может быть много интерфейсов.

Я хочу получить пользователя с его устройствами и интерфейсами каждого устройства.

Модель пользователя

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
        'profile_image', 'retrieve_email', 'retrieve_sms'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

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

}

Модель устройства

class Device extends Model
{
    public function interfaces()
    {
        return $this->hasMany('App\ModelInterface');
    }

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

}

ModelInterface Model

class ModelInterface extends Model
{
    public function device()
    {
        return $this->belongsTo('App\Device');
    }

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

Как получить интерфейсы пользователя?

Auth::user()->devices returns all the devices and works.

Как я мог сказать

Auther::user()->devices->interfaces

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Вы можете проходить через устройства и получать интерфейсы для каждого устройства.

foreach(Auth::user()->devices as $device)
{
   foreach($device->interfaces as $interface)
   {
       // do whatever you want
   }
}
0 голосов
/ 16 февраля 2019

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

$id = Auth::user()->id;

$userwithDetails = User::with('devices', 'devices.interfaces')->where('id', $id)->first();

Это даст вам пользователю коллекцию всех устройств этого пользователя, каждое устройство будет иметь другую коллекцию интерфейсов, принадлежащих этому устройству.

0 голосов
/ 16 февраля 2019

Вы захотите взглянуть на отношение HasManyThrough .

Отношение «имеет много сквозных» обеспечивает удобный ярлык для доступа к удаленным отношениям через промежуточное отношение,Например, модель Country может иметь много моделей Post через модель промежуточного пользователя.В этом примере вы можете легко собрать все сообщения в блоге для данной страны.

Что-то вроде этих строк в вашей модели пользователя:

return $this->hasManyThrough('App\Interface', 'App\Device');

, поскольку у вашего пользователя много интерфейсов - их устройства.

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