Eloquent hasOne relationship不工作laravel 5.4

时间:2017-08-04 06:46:54

标签: laravel eloquent

我试图在我的数据库中保持两个表之间的关系。

用户表:

Id User_id Name

联系人表:

Id User_Id contacts

我正在联系人表格中保存多个联系人。现在我想检索保存到User_ID的所有联系人。为此,我试图建立一个hasOne关系,但我得到一个错误的以下代码可以有人让我知道我做错了什么?我正在关注此官方文档。

用户模型:

class users extends Model
{
   protected $table = "users";
   public function contacts()
    {
        return $this->hasOne('App\contacts','User_Id');
    }
}

联系人型号:

class contacts extends Model
{
    public $table = "contacts";

    public function Users(){
        return $this->belongsTo('App\Users','User_id');
    }
}

控制器:

public function eloquentget(){

        $contacts = Users::find(1)->contacts->first();
        return response()->json($contacts,200);
    }

当我在邮递员中尝试此代码时,我得到一个例外:

ErrorException
Trying to get property of non-object

我做错了什么?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

由于您要为任何给定的用户保存多个联系人,因此您使用了错误的关系。您需要使用hasMany()设置一对多关系。

class users extends Model
{
   protected $table = "users";
   public function contacts()
    {
        return $this->hasMany('App\contacts','User_Id','User_Id');
    }
}

答案 1 :(得分:0)

尝试这样的事情

class users extends Model
{
   protected $table = "users";

   public function contacts()
   {
       return $this->hasMany('App\contacts','User_Id','User_Id');
   }
}

在您的控制器上,您可以像这样使用它

$contacts= User::find(1)->contacts; // it will return an array of collection

答案 2 :(得分:0)

您不需要使用 - > first();因为你已经使用了关系hasOne

只需使用:

$ contacts = Users :: find(1) - > contacts;

return response() - > json($ contacts,200);