2016-07-18 18 views
5

私は2つのテーブル:users,ordersを持っています。私は現在のユーザーのすべての注文を取得しようとします。Laravelの関連テーブルからデータを取得するにはどうすればいいですか?

Users Orders 
_____ ______ 
id | name id | user_id 

Userモデル:

public function orders(){ 
    return $this->hasMany("App\Order"); 
} 

注文モデル:コントローラで

public function user(){ 
    return $this->hasOne("App\User", 'user_id', 'id'); 
} 

問合せ:

public function index() 
{ 

    $orders = Order::where('user_id', Auth::guard('api')->id())->get(); 
    return response()->json(
     $orders->user 
    ); 
} 

両方のテーブルに関連する行があるため、結果がNULLになります。何か問題があります。今

public function orders() 
{ 
    return $this->hasMany("App\Order", "user_id", "id"); 
} 

public function user() 
{ 
    return $this->belongsTo("App\User"); // second and third arguments are unnecessary. 
} 
+0

コントローラ機能が動作しませんが意味のないコレクション。その機能は何をすべきか? –

+0

だから、私はテーブル 'ユーザ'からユーザに関するすべての情報を取得し、すべてのユーザの注文を同じリクエストで取得する必要があります。代わりに 'get()'を使うべきですか? – Dev

+0

'Auth :: guard( 'api') - > id()'の代わりに 'Auth :: user() - > id'を使うのはどうですか?私はあなたが持っているものを使ってヌルを得る。 –

答えて

1

現在のユーザーに、次の関数を使用してみてください。

public function index() 
{ 
    $orders = Auth::user()->with('Orders')->get()->toArray();//To get the output in array 
    /*  ^   ^
    This will get the user | This will get all the Orders related to the user*/ 

    return response()->json($orders); 
} 

@MartinHeraleckýで指摘したように、あなたはまた、hasOne()注文モデルでbelongsTo()にを変更する必要があります。

public function user(){ 
    return $this->belongsTo("App\User");// second and third arguments are unnecessary. 
} 

なぜbelongsToの()(@MartinHeraleckýの答えからコピー)、以下を参照してください。

has_onebelongs_toは、一般的に、彼らは他の関連するモデルを指しているという意味で同じです。 belongs_toこのモデルにforeign_keyが定義されていることを確認してください。 has_oneは、他のモデルhas_foreignキーが定義されていることを確認します。

あなた $orders配列は、次のようなものになります

: `取得()`メソッドはコレクションを返し、あなたがのプロパティ `user`を取得しようとしているので、

User => [ 
id => 'user id', 
name => 'user name' 
orders => [ 
    0 => [ 
     //order data 
     ] 
    1 => [ 
     //order data 
     ] 
     . 
     . 
     . 
     . 
    ] 
] 
1

は注文モデルでは、belongsTo関係を使用する必要がありますこれを使用することができます:

+0

テーブル 'User'のフィールドを持たない' Null'をもう一度返します – Dev

1

は、Userモデルでは、あなたが(アプリケーション/ User.phpで)例えばhasManyの関係を、使用することができます。

+0

すべての結果を得ることはできますか? – Dev

関連する問題