Создать / Сохранить через отношения - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующие модели:

  • Пользователь
  • Устройство
  • Группа

Ниже приведены отношения:

User belongsTo a group

Group hasMany Users

Device belongsTo group

Как я могу создать Device через пользователя?

$user = Auth::user();

$new_device = new Device;
$new_device->ip = $request->input('ip');
$new_device->port = $request->input('port');
$new_device->community_name = $request->input('community_name');

$user->group->save($new_device);

Ошибка при использовании:

$user->group->save($new_device);

Argument 1 passed to Illuminate\Database\Eloquent\Model::save() must be of the type array, object given, called in /home/snmpexperiments/laravel/app/Http/Controllers/SnmpController.php on line 74

Ошибка при использовании:

$user->group()->save($new_device);

Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::save()

Я в некотором замешательстве ... я должен сохранить устройство через группу или я должен сохранить устройство через пользователя?

Модель пользователя

public function group()
{
    return $this->belongsTo('App\Group');
}

public function devices()
{
    return $this->hasManyThrough('App\Device', 'App\Group'); // So i can get devices like $user->devices
}

Модель группы

public function users()
{
    return $this->hasMany('App\User');
}

public function devices()
{
    return $this->hasMany('App\Device');
}

public function interfaces(){
    return $this->hasManyThrough('App\ModelInterface', 'App\Device'); // So I can get interfaces through Device $group->interfaces
}

Модель устройства

public function interfaces()
{
    return $this->hasMany('App\ModelInterface');
}

public function group()
{
    return $this->belongsTo('App\Group');
}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Чтобы сохранить устройство через группу, вам нужно указать устройство.

$user->group->device()->save($new_device);

То, как вы это делаете, - попытка сохранить модель группы.Модель-> save () может принять массив опций, поэтому вы получаете эту ошибку.

0 голосов
/ 18 февраля 2019

Правильный синтаксис: $post->comments()->save($comment);.Обратите внимание на круглые скобки после комментариев, которые обращаются к методу отношения вместо свойства.Так что в этом случае вы бы использовали

$user->group->devices()->save($new_device);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...