<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.log(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
})
}
2个表(权限和角色)具有多对多的关系我已经完成了这个角色模型:
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":"myemail@gmail.com","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}
"}
编辑2:这是我通过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');
}
}
答案 0 :(得分:1)
错误消息描述了您的问题:
在null
上调用成员函数saveMany()
$role->permissions()
(AdminController.php第113行)由于某种原因返回NULL
并在之后调用->saveMany()
会导致错误。
错误很可能出现在AdminRole
函数的permissions()
模型中:
$this->belongsToMany('App\Models\AdminPermission', 'admin_permission_admin_role', 'role_id', 'permission_id')->withTimestamps();
验证关系是否使用正确的密钥。