laravel和mysql

hgc7kmma  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(295)

我需要用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
]);

如何才能获得变量,只有没有设备信息?

juud5qan

juud5qan1#

可能是这样的:

$variables = auth()->user()->devices()->with('variables')->get();

这将加载设备所拥有的关系。
对于仅访问用户,您可以使用的变量具有许多直通关系,如文档中所述:
https://laravel.com/docs/5.7/eloquent-relationships#has-许多通过

jvlzgdj9

jvlzgdj92#

你可以使用 BelongsToMany 直接获取变量的关系:

public function variables()
{
    return $this->belongsToMany('App\DeviceVariable', 'device_user',
        null, 'device_id', null, 'device_id');
}

return response()->json([
    'success' => true,
    'data' => auth()->user()->variables
]);

相关问题