为了账号安全,请及时绑定邮箱和手机立即绑定

无法从表模型中获取名称并使用 Laravel 将其显示在视图中

无法从表模型中获取名称并使用 Laravel 将其显示在视图中

PHP
达令说 2021-11-05 12:53:31
我正在尝试使用存储在用户表中的我subject_name从表中获取 ,但是每当我尝试这样做时,我都会收到此错误。有什么帮助吗?subjectsubject_id这种关系是一个用户只能注册一个主题,多个用户可以选择一个主题,因此是一对多的关系`Illuminate \ Database \ QueryException (42S02)SQLSTATE[42S02]: Base table or view not found: 1146 Table 'myunimentor_database.subject_user' doesn't exist (SQL: select `subjects`.*, `subject_user`.`user_id` as `pivot_user_id`, `subject_user`.`subject_id` as `pivot_subject_id` from `subjects` inner join `subject_user` on `subjects`.`id` = `subject_user`.`subject_id` where `subject_user`.`user_id` = 1)Previous exceptionsSQLSTATE[42S02]: Base table or view not found: 1146 Table 'myunimentor_database.subject_user' doesn't exist (42S02)`用户模型<?phpnamespace App;use Illuminate\Notifications\Notifiable;use Illuminate\Contracts\Auth\MustVerifyEmail;use Illuminate\Foundation\Auth\User as Authenticatable;use App\UserType;use App\Subject;class User extends Authenticatable{    use Notifiable;    /**     * The attributes that are mass assignable.     *     * @var array     */    protected $fillable = [        'first_name', 'last_name', 'type', 'username', 'password',    ];    /**     * The attributes that should be hidden for arrays.     *     * @var array     */    protected $hidden = [        'password', 'remember_token',    ];    /**     * The attributes that should be cast to native types.     *     * @var array     */    protected $casts = [        'email_verified_at' => 'datetime',    ];    public function getAllUsers() {        return User::all();     }     public function userTypes()     {         return $this->belongsTo('App\Users');     }     public function subjects()    {        return $this->belongsToMany('App\Subject');    }}
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在您的用户模型中,关系应该是belongsTo()


 public function subject(){

    return $this->belongsTo('App\Subject','subject_id','id');

}

现在您可以访问您的主题名称 Auth::user()->subject->subject_name


正如您所说,一个用户只有一个主题,因此用户 只属于一个主题。


主题可以有多个用户,这意味着HasMany。 用户模型 ->所属主题 主题模型 ->拥有用户的HasMany


请在此处查看更多信息。https://laravel.com/docs/5.8/eloquent-relationships#one-to-many


查看完整回答
反对 回复 2021-11-05
?
守着一只汪

TA贡献1872条经验 获得超3个赞

在您的用户模型中,关系应该是belongsTo()


 public function subject(){

    return $this->belongsTo('App\Subject','subject_id','id');

}

现在您可以访问您的主题名称 Auth::user()->subject->subject_name


正如您所说,一个用户只有一个主题,因此用户 只属于一个主题。


主题可以有多个用户,这意味着HasMany。 用户模型 ->所属主题 主题模型 ->拥有用户的HasMany


请在此处查看更多信息。https://laravel.com/docs/5.8/eloquent-relationships#one-to-many您的belongsToMany关系导致了问题。它导致 laravel 认为有一个名为subject_user的数据透视表,但遗憾的是没有数据透视表。所以改变你的关系到belongsTo


public function subject(){

    return $this->belongsTo('App\Subject','subject_id');

}

这是另一个问题。在可填充数组中的用户模型中,没有 subject_id。所以subject_id 不会保存在数据库中。将此添加到您的可填充数组中。


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信