Laravel一对一关系不起作用


Laravel One-to-One relationship not working

我有两个数据库表=>mobile_phonesmobile_users

mobile_phones 的架构

  • phone_id(主键,auto_increment)

  • phone_name(varchar(150))

  • phone_mode(int(11))

mobile_users 的架构

  • user_id(主键,auto_increment)

  • 用户名(varchar(150))

  • mobile_phone_id(引用mobile_phones(phone_id)的外键)

mobile_phones 的型号类别

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
class MobilePhone extends Model
{
    protected $primaryKey = "phone_id";
    public $timestamps = false;
    protected $table = "mobile_phones";
    protected $fillable = array("phone_name","phone_model");
    public function mobileUser()
    {
        return $this->hasOne("MobileUser","mobile_phone_id");
    }
}

mobile_users 的型号类别

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
class MobileUser extends Model
{
    protected $primaryKey = "user_id";
    public $timestamps = false;
    protected $table = "mobile_users";
    protected $fillable = array("username","mobile_phone_id");
    public function mobilePhone()
    {
        return $this->belongsTo("MobilePhone","phone_id");
    }

}

我试图在MobileUserMobilePhone模型之间建立一对一的关系,但没有实现。以下是我在控制器操作中的代码-

public function query()
    {
       $getUsername = MobilePhone::find(1)->username;        
       echo $getUsername;
    }

当我做var_dump()时,上面的代码给了我NULL我确实在SO上检查了类似的问题,他们使用了with()(但这不是必要的)。我指的是Laravel 5.2文档,它们指出我们可以使用Eloquent的动态属性访问另一个关系中的关联记录。该文档的链接在这里

请帮忙!!

您需要调用模型的函数,因此执行以下

public function query()
{
       $getUsername = MobilePhone::find(1)->mobileusers;        
       echo $getUsername->username;
}

执行此操作时:

public function query()
    {
       $getUsername = MobilePhone::find(1)->username;        
       echo $getUsername;
    }

您试图访问MobilePhone编号中的username属性,这是不正确的。

试试这个:

public function query()
    {
       $getUsername = MobilePhone::find(1)->mobileUser->username;        
       echo $getUsername;
    }

此外,我鼓励您使用with语句,因为它将预加载所需的所有依赖项(意味着一个查询),而不是急于加载它(许多查询)

类似这样的东西:

public function query()
    {
       $getUsername = MobilePhone::find(1)->mobileUser;        
       echo $getUsername->username;
    }