duanfei9278 2017-01-20 11:14
浏览 41
已采纳

当尝试使用外键获取类型时,Laravel关系返回null

I am trying to fetch the type of user using the foreign key in the users table i.e. user_types_id but when I do it I just get null and cant get into the function userType in User Model. Any help would be much appreciated.

Thank you in advance. I have provided related models and tables

Controller

public function dashboard() {

    $userType = UserType::all();

    $id = Auth::user()->id;
    var_dump($id); // returns id

    $users = User::find($id);
    var_dump($user->user_types_id);  // returns user_type_id in users table

        if($users->userType){
            var_dump($users->userType->types); // error is in here. Not taking userType.
        } else {
            echo 'does not exit';
        }

        die();

    return view('dashboard', compact('users'));
}

User Model

    <?php
    namespace App;

    use Illuminate\Foundation\Auth\User as Authenticatable;
    use App\UserType;

    class User extends Authenticatable
    {
        /**
          * The attributes that are mass assignable.
          *
          * @var array
          */

        protected $fillable = [
            'username', 'password',
        ];

        /**
          * The attributes that should be hidden for arrays.
          *
          * @var array
          */

        protected $hidden = [
        'password', 'remember_token',
         ];

        public function userType() {
            return $this->belongsTo(UserType::class);
        }
    }

UserType Model

    <?php

    namespace App;
    use Illuminate\Database\Eloquent\Model;
    use App\User;

    class UserType extends Model
    {
        protected $fillable=['types'];

    public function users() {
        return $this->hasMany(User::class);
        }
    }

User Table

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_types_id')->unsigned()->index();
            $table->string('username')->unique();
            $table->string('password');
            $table->string('salt');
            $table->rememberToken();
            $table->timestamps();
        });
    }

UserType Table

    public function up()
    {
        Schema::create('user_types', function (Blueprint $table) {
            $table->increments('id');
            $table->string('types');
            $table->timestamps();
        });
    }
  • 写回答

1条回答 默认 最新

  • dongpu42006096 2017-01-20 11:40
    关注

    You've named your relation userType, therefore Eloquent assumes that the foreign key is called user_type_id, not user_types_id.

    Replace

    return $this->belongsTo(UserType::class);
    

    with

    return $this->belongsTo(UserType::class, 'user_types_id');
    

    to tell Eloquent the name of foreign key column and it should work.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器