这是我第一次尝试使用雄辩的关系。我有一个 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');
});
}
我在两个模型上都应用了hasOne
和belongs 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);
}
}
答案 0 :(得分:3)
您将手机课程命名为phoneModel
,但您将关系添加为$this->hasOne('App\Models\phone');
。您还在App
命名空间中创建了这些类,但将其引用为App\Models\class
。
标准做法是在模型后面使用大写字母命名模型类。因此,您的课程将被称为User
和Phone
,而不是userModel
和phoneModel
。数据库表格为users
和phones
。如果你使用这些标准,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');
}