Мне нужно создать API с laravel и PHP.Я создал 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');
}
И наконец модель DeviceVariable:
public function device()
{
return $this->belongsTo('App\Device');
}
public function user()
{
return $this->belongsTo('App\User');
}
IЯ могу показать все устройства, связанные с аутентифицированным пользователем, но я не могу показать все переменные, связанные с устройствами, которые связаны с этим пользователем.
Этот код (метод индекса DeviceVariablecontroller
) наиболее близок к получению переменных:
$counter = 1;
$arrayIndex = 0;
while($counter <= 10) {
if(auth()->user()->devices()->find($counter)) {
$variables[$arrayIndex] = auth()->user()->devices()->find($counter)->variables;
$arrayIndex++;
}
$counter++;
}
Есть ли способ сделать массив из всех пользовательских устройств?'Идентификаторы и цикл через них? - или есть ли более умный способ получить все переменные всех устройств пользователя?
РЕДАКТИРОВАТЬ: Комментарий получил меня оба устройства, а также каждыйпеременные устройства.
$variables = auth()->user()->devices()->with('variables')->get();
return response()->json([
'success' => true,
'data' => $variables
]);
Как получить переменные ТОЛЬКО без информации об устройстве?