我有两个表: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结果,我做错了什么,因为两个表中都有相关的行。
如果您想检索属于当前用户的所有订单,请尝试使用以下函数。
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);
}
正如@Martin Heralecký所指出的,您还需要将订单模型中的hasOne()
更改为belongsTo()
。参见以下内容(摘自@Martin Heraleckýanswer)
public function user(){
return $this->belongsTo("App'User");// second and third arguments are unnecessary.
}
为什么属于To():
CCD_ 5和CCD_。belongs_to
确保此模型已定义外键。has_one
确保已定义其他模型的_foreign键。
你的$orders
阵列看起来像这样:
User => [
id => 'user id',
name => 'user name'
orders => [
0 => [
//order data
]
1 => [
//order data
]
.
.
.
.
]
]
In Order模型需要使用belongsTo
关系:
public function user()
{
return $this->belongsTo("App'User"); // second and third arguments are unnecessary.
}
在用户模型中,您可以使用hasMany关系,例如:
App/User.php
添加
public function orders()
{
return $this->hasMany("App'Order", "user_id", "id");
}
现在你可以使用这个:
return User::find(1)->orders;
确保所有数据都已填写,从该关系中获取的数据均为null,关系列表中只有一个数据包含null,这将创建一个错误,说明变量为null。
型号:
public function arviQrs()
{
return $this->hasMany(ArviQr::class);
}
public function merchant()
{
return $this->belongsTo(Merchant::class);
}
控制器:
$qrs = ArviQr::orderBy('create_time','desc')->get();
刀片:
@foreach ($qrs as $key => $item)
$item->merchant->name
@endforeach
在我的数据库中,我有一个数据arviQrs.merchant_id为null,然后我将其更改为true id,voalaa它没有错误并正在运行。
其错误bcs arviQrs.merchant_id和merchant.id为angker,不能为空