在 Laravel 中将二维数组转换为 json 对象
Posted
技术标签:
【中文标题】在 Laravel 中将二维数组转换为 json 对象【英文标题】:Convert two dimentional array into the json object in Laravel 【发布时间】: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)->get() ;
还是你想要单行?
您想要项目的版本还是只需要版本?您的模型也会有所帮助
【参考方案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;
【讨论】:
您能分享一下您收到的回复吗?以上是关于在 Laravel 中将二维数组转换为 json 对象的主要内容,如果未能解决你的问题,请参考以下文章