2017-08-04 11 views
0

私のデータベースの2つのテーブル間の関係を維持しようとしています。Eloquent hasOne relationship Not working laravel 5.4

ユーザー表:

Id User_id Name 

コンタクト表:

Id User_Id contacts 

私は連絡先テーブル内の複数の連絡先を保存しています。今私はUser_IDに保存されているすべての連絡先を取得したい。そのために、私はhasOneの関係を確立しようとしていますが、次のコードでエラーが発生します。誰かが私に間違っていることを教えてもらえますか?私はこれについての公式の文書に従っています。

Userモデル:

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

usersテーブルに「id」と「User_Id」の両方があるのはなぜですか?また、名前の選択や非標準のケースでは、Laravelの推奨事項w.r.tに従うことを検討する必要があります。命名 – apokryfos

+0

コードが動作したら、https://codereview.stackexchange.com/の人がそれを実行して、@apokryfosの示唆している命名規則とテーブル構造をフィードバックすることができます。あなたの人生を将来容易にするためには、おそらくあなたが変えるべきことがいくつかあります。 –

+0

連絡先テーブルのIDを使用して、別個の連絡先を編集しています。私は同じuser_idを使用してそれらの複数を持っている。 – Prakash

答えて

2

特定のユーザーに対して複数の連絡先を保存しているため、間違った関係を使用しています。 hasMany()を使用して1対多の関係を設定する必要があります。

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

はい、ありがとうございます。しかし、今私はユーザーデータを取得するが、私は連絡先データを取得していない。それはnullです。 '連絡先:[]' – 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)を見つける - >連絡先を。

リターンレスポンス() - > json($ contacts、200);