2017-08-04 150 views
0

我想保持我的数据库中的两个表之间的关系。雄辩有一个关系不工作laravel 5.4

用户表:

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 

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

+0

为什么用户表中有'id'和'User_Id'?你也可以选择名称,特别是非标准的案例,你应该考虑遵循Laravel的建议w.r.t.命名为 – apokryfos

+0

代码运行后,您可能需要https://codereview.stackexchange.com/上的人员运行它,以获取有关@apokryfos建议的命名约定和表结构的反馈。有几件事你可能应该改变,让你的生活在未来更轻松。 –

+0

我正在使用联系人表中的ID来编辑单独的联系人。因为我有多个使用相同的user_id。 – Prakash

回答

2

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

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

是的,谢谢。但现在我得到一个用户数据,但我没有得到联系人数据。它是空的。 '联系人:[]' – Prakash

+0

尝试'返回$ this-> hasMany('App \ contacts','User_Id','User_Id');' –

+0

是这样做的。你能告诉我为什么我需要这样做吗? – Prakash

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 
0

你并不需要使用 - >第一();因为你已经使用的关系hasOne

只需使用:

$接触=用户::发现(1) - >联系人;

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