我如何通过多对多的关系定义来解决这个问题



我有这样的问题,我今天问了另一个与此代码有关的问题。我解决了这个问题,但是现在它给出了另一个错误。

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

相关内容

最新更新