我有这样的问题,我今天问了另一个与此代码有关的问题。我解决了这个问题,但是现在它给出了另一个错误。
public function addSubject(Request $request){
$student=User::find($request->invisible);
$classsubjects = $request['classsubjects'];
$student->classSubjects()->attach($classsubjects);
return redirect()->route('users.index')
->with('flash_message',
'User successfully added.');
}
在这里,我给出了classSubject模型和用户模型定义的定义。
<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
use SpatiePermissionTraitsHasRoles;
class User extends Authenticatable
{
use Notifiable;
use HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','language'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
public function classSubject()
{
return $this->hasMany('AppClassSubject');
}
public function classSubjects()
{
return $this->belongsToMany('AppClassSubject');
}
}
这是我的类型模型。
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class ClassSubject extends Model
{
protected $fillable = [
'class_room_id','subject_id','teacher_id'
];
public function classRoom()
{
return $this->belongsTo('AppClassRoom','class_room_id','id');
}
public function subject()
{
return $this->belongsTo('AppSubject','subject_id','id');
}
public function teacher()
{
return $this->belongsTo('AppUser','teacher_id','id');
}
public function students()
{
return $this->belongsToMany('AppUser');
}
}
这是我遇到的错误。
Illuminate Database QueryException (42S02)
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lcurve.class_subject_user' doesn't exist (SQL: insert into `class_subject_user` (`class_subject_id`, `user_id`) values (3, 4), (1, 4))
我应该需要创建一个像错误消息的表。
您需要创建一个枢轴表来处理此功能。例如:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class ClassSubjectUser extends Model
{
protected $fillable = [
'class_subject_id','user_id'
];
protected $table = 'class_subject_user';
}
然后,在定义关系时,您应该设置表和键的名称。
在用户模型中:
public function classSubjects()
{
return $this->belongsToMany('AppClassSubject', 'class_subject_user', 'class_subject_id', 'user_id');
}
classSubject模型:
public function students()
{
return $this->belongsToMany('AppUser', 'class_subject_user', 'user_id', 'class_subject_id');
}
这将正确设置属于属于的关系。
参考:https://laravel.com/docs/5.5/eloquent-relationships#updating-many-to-many-realationships