2017-08-04 82 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);