Я не могу заполнить сводную таблицу

Привет, ребята, у меня есть проект, в котором я использую Angular 5 для интерфейса и Laravel 5.5 для серверной части (только api). Мне нужно передать ряд разрешений, чтобы ассоциироваться с ролью, которую я создаю в данный момент. Разрешения получаются http-запросом. ng-select показывает разрешения на выбор (разрешения var), а выбранные разрешения сохраняются в другой переменной (выбранный параметр var). Это форма, которую я использую для создания роли:

<form role = "form">
    <div class = "form-group row">
      <label for = "name" class = "col-md-3 col-form-label">Name</label>
      <input type = "text" id = "name" name = "name" class = "col-md-9 form-control" placeholder = "Name" [(ngModel)] = "name">
    </div>
    <div class = "form-group row">
      <label class = "col-md-3 col-form-label">Permission</label>
      <div class = "col-md-9 spaces">
        <ng-select
          [items] = "permissions"
          [multiple] = "true"
          [closeOnSelect] = "false"
          [hideSelected] = "true"
          name = "permissions"
          bindLabel = "name"
          placeholder = "Select Permissions"
          [(ngModel)] = "selected">
        </ng-select>
      </div>
    </div>

    <div class = "form-group row">
      <button type = "button" class = "btn success" (click) = "newRole()">Submit</button>
    </div>
  </form>

Это мои ТС и мой сервисный звонок:

//ts
newRole(){
  this.admin.newRole(this.name, this.selected).subscribe(
    result => {
      console.info(result);
    }
  )
}

//service call
newRole(name, permissions) {
let headers = new HttpHeaders().set('Accept', 'application/json').append('Authorization', 'Bearer '+ sessionStorage.getItem('token'));

return this.http
  .post(environment.apiUrl + "/api/admin/newRole", {
    name: name,
    permissions: permissions
  }, {
    headers: headers
  })

}

Две таблицы (разрешения и роли) имеют отношение «многие ко многим». Я сделал эту ролевую модель:

class AdminRole extends Model
{
  /**
  * The attributes that are mass assignable.
  *
  * @var array
  */
 protected $fillable = [
   'name',
 ];

 protected $hidden = [

 ];

 public function users() {
   $this->belongsToMany('App\Models\AdminUser', 'admin_role_admin_user', 'role_id', 'user_id')->withTimestamps();
 }

 public function permissions() {
   $this->belongsToMany('App\Models\AdminPermission', 'admin_permission_admin_role', 'role_id', 'permission_id')->withTimestamps();
 }
}

и эта модель разрешений:

class AdminPermission extends Model
{
  /**
  * The attributes that are mass assignable.
  *
  * @var array
  */
 protected $fillable = [
   'name', 'http_method', 'http_path',
 ];

 /**
  * The attributes that should be hidden for arrays.
  *
  * @var array
  */
 protected $hidden = [

 ];

 public function users() {
   $this->belongsToMany('App\Models\AdminUser', 'admin_permission_admin_user', 'permission_id', 'user_id')->withTimestamps();
 }

 public function roles() {
   $this->belongsToMany('App\Models\AdminRole', 'admin_permission_admin_role', 'permission_id', 'role_id')->withTimestamps();
 }
}

Это мой ответ в AdminController.php:

class AdminController extends Controller{

  public function newRole(Request $request){
    $input = $request->all();
    $id = AdminRole::create($input)->id;
    $role = AdminRole::find($id);

    $permissions = $input['permissions'];
    $role->permissions()->saveMany($permissions);

    return response()->json(['success'=>'Done'], $this->successStatus);
 }
}

а это мой файл api.php:

Route::post('login', 'AuthController@login');
Route::post('register', 'AuthController@register');

Route::group(['middleware' => 'auth:api'], function(){

  Route::get('profile', 'AuthController@profile');

  Route::prefix('admin')->group(function (){
    Route::get('/getPermissionsList', 'Admin\AdminController@getPermissionsList');
    Route::post('/newPermission', 'Admin\AdminController@newPermission');
    Route::get('/getRolesList', 'Admin\AdminController@getRolesList');
    Route::post('/newRole', 'Admin\AdminController@newRole');
  });

  Route::get('logout', 'AuthController@logout');
});

Когда я пытаюсь воспользоваться услугой, я получаю такой ответ:

Я не могу заполнить сводную таблицу

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ 1: это мой последний журнал сервера:

[2018-04-17 08:42:22] local.ERROR: Call to a member function saveMany() on null {"userId":1,"email":"[email protected]","exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function saveMany() on null at C:\\Users\\ADMIN\\Documents\\myproject\\app\\Http\\Controllers\\Admin\\AdminController.php:113)
[stacktrace]
#0 [internal function]: App\\Http\\Controllers\\Admin\\AdminController->newRole(Object(Illuminate\\Http\\Request))
#1 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php(54): call_user_func_array(Array, Array)
#2 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('newRole', Array)
#3 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(212): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\Admin\\AdminController), 'newRole')
#4 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(169): Illuminate\\Routing\\Route->runController()
#5 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(659): Illuminate\\Routing\\Route->run()
#6 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#7 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\barryvdh\\laravel-cors\\src\\HandleCors.php(58): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#8 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Barryvdh\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#9 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#10 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#11 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#12 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#13 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\Authenticate.php(43): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#14 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'api')
#15 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#16 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\ThrottleRequests.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#17 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle(Object(Illuminate\\Http\\Request), Object(Closure), 60, '1')
#18 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#19 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(661): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#21 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(636): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#22 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(602): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#23 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(591): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#24 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#25 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#26 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\fideloper\\proxy\\src\\TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#27 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#30 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#33 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#36 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#39 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#40 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\barryvdh\\laravel-cors\\src\\HandlePreflight.php(35): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#42 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(149): Barryvdh\\Cors\\HandlePreflight->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#43 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#44 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#45 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#46 C:\\Users\\ADMIN\\Documents\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#47 C:\\Users\\ADMIN\\Documents\\myproject\/public\\index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#48 C:\\Users\\ADMIN\\Documents\\myproject\\server.php(21): require_once('C:\\\\Users\\\\ADMIN\\\\...')
#49 {main}
"} 

Обновлено еще раз: Это моя сводная таблица, которую я создал благодаря laracast / generators:

class CreateAdminPermissionAdminRolePivotTable extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
   */
  public function up()
  {
    Schema::create('admin_permission_admin_role', function (Blueprint $table) {
        $table->integer('permission_id')->unsigned()->index();
        $table->foreign('permission_id')->references('id')->on('admin_permissions')->onDelete('cascade');
        $table->integer('role_id')->unsigned()->index();
        $table->foreign('role_id')->references('id')->on('admin_roles')->onDelete('cascade');
        $table->primary(['permission_id', 'role_id']);
        $table->timestamps();
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
   */
  public function down()
  {
    Schema::drop('admin_permission_admin_role');
  }
}
AdminRole::find($id); не находит ролей .. Есть ли у вас логи сервера?
Pogrindis 17.04.2018 10:58

Я обновил свой вопрос последним журналом

Gabax 17.04.2018 11:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
97
1

Ответы 1

Сообщение об ошибке описывает вашу проблему:

Call to a member function saveMany() on null

$role->permissions() (строка 113 AdminController.php) по какой-то причине возвращает NULL, а вызов ->saveMany() на этом впоследствии приводит к полученной ошибке.

Скорее всего ошибка в вашей модели AdminRole в функции permissions():

$this->belongsToMany('App\Models\AdminPermission', 'admin_permission_admin_role', 'role_id', 'permission_id')->withTimestamps();

Убедитесь, что в отношениях используются правильные ключи.

Я обновил свои вопросы схемой сводной таблицы. Как видите, поля такие же

Gabax 17.04.2018 11:35

Другие вопросы по теме