如何从Laravel中的相关表中获取数据(一对多)?

时间:2016-07-18 21:34:04

标签: php laravel laravel-5.2

我有两张桌子:usersorders。我试图获得当前用户的所有订单。

Users    Orders
_____    ______
id | name  id | user_id

用户模型:

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结果,我做错了,因为两个表中都有相关的行。

3 个答案:

答案 0 :(得分:2)

在订单模型中,您需要使用belongsTo关系:

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

答案 1 :(得分:2)

如果要检索属于当前用户的所有订单,请尝试使用以下功能。

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()。请参阅以下内容(复制自@MartinHeralecký答案)

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

为什么belongsTo():

has_onebelongs_to在某种意义上通常是相同的,因为它们指向其他相关模型。 belongs_to确保此模型定义了foreign_key。 has_one确保定义了另一个模型has_foreign键。

您的$orders数组看起来像这样:

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

答案 2 :(得分:1)

在用户模型中,您可以使用hasMany关系,例如:

highlightId

添加

App/User.php

现在你可以使用它:

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