【问题标题】:Convert two dimentional array into the json object in Laravel在 Laravel 中将二维数组转换为 json 对象
【发布时间】:2021-08-29 04:50:57
【问题描述】:

我正在将二维数组转换为 JSON 对象。

现在我的控制器返回这个输出:

[
    [
        {
            "id": 1,
            "title": "V1",
            "project_id": 1
        }
    ],
    []
]

想把它转换成这样:

[
  {
    "id": 1,
    "name": "Laravel"
  },
  {
    "id": 2,
    "name": "Wordpress"
  }
]

我的控制器代码:

$user = auth()->user();
$projectVersions = array();

foreach($user->projects as $project)
{
    $projectId = $project->pivot->project_id;
    $projectVersions[] = Version::where('project_id', $projectId)
        ->where('created_by', $user->id)
        ->get();
}

return $projectVersions;

当我使用@John Lobo 建议的以下代码时,它会返回以下输出:

{
  "id": 2,
  "name": "Hadayat Niazi",
  "email": "niazicr801@gmail.com",
  "is_admin": 0,
  "email_verified_at": null,
  "created_at": "2021-06-11T15:13:00.000000Z",
  "updated_at": "2021-06-11T15:13:00.000000Z",
  "projects": [
    {
      "id": 1,
      "name": "Laravel",
      "pivot": {
        "user_id": 2,
        "project_id": 1
      },
      "versions": [
        {
          "id": 1,
          "title": "V1"
        }
      ]
    }
  ]
}

显示用户项目和版本:

我再次更新@John Lobo 的代码,他想查看输出

$user = User::with(['projects', 'projects.versions'])
    ->find(auth()->user()->id);

$result = $user->projects->map(function ($project) {
    return [
        $project->versions,
    ];
});

return $result;

输出代码

[
    [
        [
            {
                "id": 1,
                "title": "V1",
                "project_id": 1,
                "version": "1.22",
                "created_by": 2,
                "is_publish": 0,
                "feature": "<b>In this ipdate asdsdasd</b>",
                "bug_fix": "<p><b>sdfdffffffffff</b></p>",
                "created_at": "2021-06-12T08:08:21.000000Z",
                "updated_at": "2021-06-12T08:08:21.000000Z"
            },
            {
                "id": 2,
                "title": "v2",
                "project_id": 1,
                "version": "2.12",
                "created_by": 2,
                "is_publish": 0,
                "feature": "adsdasdsadas",
                "bug_fix": "sddasdas",
                "created_at": null,
                "updated_at": null
            }
        ]
    ],
    [
        []
    ]
]

【问题讨论】:

  • 显示控制器代码
  • 您的回复中是否使用了json_encode()
  • 能发一下项目模型吗
  • 这条线是获取多个数据$projectVersions[] = Version::where('id', $projectId)-&gt;get() ;还是你想要单行?
  • 您想要项目的版本还是只需要版本?您的模型也会有所帮助

标签: json laravel object multidimensional-array


【解决方案1】:

在控制器中,您可以执行以下操作。如果您在名为版本的项目模型中有关系

  $projectVersions=User::with(['projects','projects.version'])->find(auth()->user()->id);
    
  return $projectVersions->projects;

我相信项目模型有以下关系

public function version(){

return $this->hasMany(Version::class);
}

更新

$user=User::with(['projects','projects.versions'])->find(auth()->user()->id);

    $result = $user->projects->map(function ($project) {

        return $project->versions;
    });

 dd($result);

【讨论】:

  • 它正在工作,但它正在返回所有用户及其项目及其版本,我不想要这些。我只想显示记录的用户项目及其版本。
  • 它没有得到它应该是第一个()。它是我的错误
  • 你也可以这样做 $projectVersions=User::with(['projects','projects.version'])->find(auth()->user()->id) ;
  • 它正在工作,但我只想返回版本,因为我需要将它传递给 laravel yajra 数据表。
  • 你能显示这个查询返回什么以及你期望的结果吗
【解决方案2】:

像下面这样使用

$json = json_encode($responseOfController);
echo "<pre>";print_r($json);die;

【讨论】:

  • 您能分享一下您收到的回复吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2020-11-10
  • 2015-10-22
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
相关资源
最近更新 更多