班级'电话'在实施雄辩的关系时找不到

时间:2016-02-18 14:44:09

标签: php laravel eloquent

这是我第一次尝试使用雄辩的关系。我有一个 userModel 和一个 phoneModel 类。他们代表用户和分别是手机表。我在这里尝试访问用户登录时的电话号码。

  用户表有字段(id,name,password)和phone表有   (字段ID,phone_no,user_id)

电话迁移如下:

public function up()
{
    //
    Schema::create('phone',function(Blueprint $table){
       $table->increments('id');
       $table->string('phone_no',20);
       $table->integer('user_id')->unsigned();
       $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

我在两个模型上都应用了hasOnebelongs to关系:

userModel.php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable;
class userModel extends Model implements Authenticatable
{
    //
    use \Illuminate\Auth\Authenticatable;
    protected $table = 'users';

    public function phone(){
             $this->hasOne('App\Models\phone');
    }

}

phoneModel.php:

namespace App;

use Illuminate\Database\Eloquent\Model;

    class phoneModel extends Model
    {
        //
        protected $table='phone';
        public function user()
        {
            return $this->belongsTo('users');
        }
    }

现在,当我尝试从登录用户那里获取电话号码时,我收到一个名为“电话号码”的错误电话'找不到

以下是userController的show方法中的代码:

public function show($user)
{
    //
    $indicator=is_numeric($user)?'id':'name';
    $info=userModel::where($indicator,'=',$user)->get()->first();
    if($info){
       $phone = userModel::find($info->id)->phone;
       $data=array('info'=>$info,'phone'=>$phone);
       return View::make('user.show')->with($data);
    }else{
      $info=userModel::where($indicator,'=', Auth::user()->name)->get()->first();
      return View::make('user.show')->with('user',$info);
    }
}

1 个答案:

答案 0 :(得分:3)

您将手机课程命名为phoneModel,但您将关系添加为$this->hasOne('App\Models\phone');。您还在App命名空间中创建了这些类,但将其引用为App\Models\class

标准做法是在模型后面使用大写字母命名模型类。因此,您的课程将被称为UserPhone,而不是userModelphoneModel。数据库表格为usersphones。如果你使用这些标准,Laravel将在幕后自动处理很多事情。

用户类

namespace App;

class User extends Model implements Authenticatable
{
//
use \Illuminate\Auth\Authenticatable;

//Laravel will assume the User model is in the table `users` so you don't need to specify

public function phone(){
         $this->hasOne('App\Phone');
}

电话课程

namespace App;

class Phone extends Model
{
    //Laravel will assume the Phone model is in the table `phones` so you don't need to specify
    public function user()
    {
        return $this->belongsTo('App\User');
    }