用户可以有很多设备,每个设备可以有很多接口。
我想让用户了解他的设备以及每个设备的界面。
用户模型
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模型
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
答案 0 :(得分:0)
您需要查看HasManyThrough关系。
“具有多次通过”关系为通过中间关系访问远处的关系提供了方便的快捷方式。例如,一个国家(地区)模型可能通过一个中间用户模型具有许多邮政模型。在此示例中,您可以轻松地收集给定国家/地区的所有博客文章。
您的用户模型中的这些内容如下:
return $this->hasManyThrough('App\Interface', 'App\Device');
因为您的用户通过其设备 有许多接口。
答案 1 :(得分:0)
您可以遍历设备并获取每个设备的接口。
foreach(Auth::user()->devices as $device)
{
foreach($device->interfaces as $interface)
{
// do whatever you want
}
}
答案 2 :(得分:0)
您可以使用:
$id = Auth::user()->id;
$userwithDetails = User::with('devices', 'devices.interfaces')->where('id', $id)->first();
这将为您提供该用户所有设备的集合,每个设备将具有属于该设备的另一接口集合。