首页 > 解决方案 > 如何使用相关模型操作 Laravel 集合并返回自定义实例?

问题描述

我的模型关系

  return $this->hasMany('App\Models\Opportunity')->with('user');

我的尝试

$project = Project::find(1);
$$opportunities = $project->opportunities
  ->where('status', "confirmed");


$opportunities->each(function ($opportunity) {
    return $opportunity->get('user');
});

目标

我的目标是以下列结构返回数据:

Opportunities:
  Opportunity:
    Status,
    Amount
    Currency
    Name

请注意,用户是机会本身的子集。

问题

这将返回 1024 SQL 错误。

水平

理想情况下

如果我可以使用查询本身返回所有这些信息,那将是理想的。

标签: laraveleloquent

解决方案


在您的查询上调用get()方法以首先获取其结果:

$oppurtunities = $project->opportunities()
  ->where('status', "confirmed")
  ->get();

您已经急切地user为每个实例加载了实例,opportunity因此只需调用$opportunity->user以返回每个机会的用户:

$project = Project::find(1);
$opportunities = $project
    ->opportunities()
    ->where('status', "confirmed")
    ->get();

$filtered = $opportunities->map(function ($opportunity) {
    return [
        'status' => $opportunity->status,
        'amount' => $opportunity->amount_pledged,
        'currency' => $opportunity->currency,
        'name' => optional($opportunity->user)->full_name
   ];
})->all();

推荐阅读