我需要用laravel和php创建一个api。我已经创建了api路由到 GET
所有用户和 GET
与用户相关的所有设备。
我在mysql中制作了以下表格:
设备:
increments('id');
string('name');
longText('description');
用户与设备关系表:
increments('id');
unsignedInteger('user_id');
unsignedInteger('device_id');
foreign('user_id')->references('id')->on('users');
foreign('device_id')->references('id')->on('devices');
变量:
increments('id');
string('type');
unsignedInteger('device_id');
longText('description');
foreign('device_id')->references('id')->on('devices');
模型之间有关系代码:
用户模型:
public function deviceVariables() {
return $this->hasMany('App\DeviceVariable');
}
public function devices()
{
return $this->belongsToMany('App\Device');
}
设备型号:
public function users()
{
return $this->belongsToMany('App\User');
}
public function variables()
{
return $this->hasMany('App\DeviceVariable');
}
最后是设备变量模型:
public function device()
{
return $this->belongsTo('App\Device');
}
public function user()
{
return $this->belongsTo('App\User');
}
我可以显示与已验证用户相关的所有设备,但无法显示与该用户相关的设备相关的所有变量。
此代码(索引方法) DeviceVariablecontroller
)是我最接近的变量:
$counter = 1;
$arrayIndex = 0;
while($counter <= 10) {
if(auth()->user()->devices()->find($counter)) {
$variables[$arrayIndex] = auth()->user()->devices()->find($counter)->variables;
$arrayIndex++;
}
$counter++;
}
有没有一种方法可以把所有用户设备的id组成一个数组,并通过它们进行循环?——或者有没有一种更聪明的方法来获取所有用户设备的所有变量?
编辑:comment给了我两个设备以及每个设备的变量。
$variables = auth()->user()->devices()->with('variables')->get();
return response()->json([
'success' => true,
'data' => $variables
]);
如何才能获得变量,只有没有设备信息?
2条答案
按热度按时间juud5qan1#
可能是这样的:
这将加载设备所拥有的关系。
对于仅访问用户,您可以使用的变量具有许多直通关系,如文档中所述:
https://laravel.com/docs/5.7/eloquent-relationships#has-许多通过
jvlzgdj92#
你可以使用
BelongsToMany
直接获取变量的关系: