это очень просто
$users = \DB::table('payments')
->join('devices', 'devices.id', '=', 'payments.device_id')
->join('users', 'users.id', '=', 'devices.user_id')
->select('payments.*', 'users.name')
->get();
Другой способ:
У нас есть три модели:
- Пользователь (имеет много устройств )
- Устройство (принадлежит пользователю & имеет много платежей)
- Платеж (принадлежит устройству)
1) Пользователь. php
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
public function devices()
{
return $this->hasMany(Device::class);
}
2) Устройство
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Device extends Model
{
//
public function user()
{
return $this->belongsTo(User::class);
}
public function payments()
{
return $this->hasMany(Payment::class);
}
}
3) Оплата
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Payment extends Model
{
//
public function device()
{
return $this->belongsTo(Device::class);
}
}
и ваш запрос должен быть:
Payament::with(['device','device.user'])->get();