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


How to get data from related table in Laravel (one to many)?

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

如果您想检索属于当前用户的所有订单,请尝试使用以下函数。

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,不能为空