我有两张桌子:users
,orders
。我试图获得当前用户的所有订单。
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结果,我做错了,因为两个表中都有相关的行。
答案 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.
}
has_one
和belongs_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");
}