我有一个数据透视表,用于存储数据以同步其他三个表
我有一个函数将返回基于特定字段的行,例如device_id
public function getDeviceReleasesByProfileId($profile_id)
{
try {
$profile = Profile::find($profile_id);
if (!$profile) {
return $this->respondNotFound('Profile not found');
}
$profile_releases = DeviceProfileRelease::where('profile_id', '=', $profile_id)->get();
// Refactor to array here.
return $this->respondWithSuccess($profile_releases);
} catch (\Exception $error) {
return $this->respondInternalError($error->getMessage());
}
}
我需要做的是获得目前的结果
[
{
"device_id": 19,
"profile_id": 7,
"release_id": 1
},
{
"device_id": 19,
"profile_id": 7,
"release_id": 2
},
{
"device_id": 19,
"profile_id": 7,
"release_id": 3
},
{
"device_id": 19,
"profile_id": 7,
"release_id": 4
}
]
我希望实现的是对于每个结果,使用
$profile_releases->release()->get()
方法将结果更改为版本列表而不是透视值数组。我的问题是,我是否以错误的方式构建了数据透视表,并且有一种方法可以重构它以获得最佳性能和更好的代码。
我知道可以这样做,
$releases = array();
foreach ($profile_releases as $profile_release)
{
$release_search = Release::find($profile_release->release_id);
$releases[] = $release_search;
}
我只是想看看是否有人对更好的方法有任何其他想法,这感觉不对
答案 0 :(得分:0)
public function getDeviceReleasesByProfileId($profile_id)
{
try {
$profile = Profile::find($profile_id);
if (!$profile) {
return $this->respondNotFound('Profile not found');
}
$profile_releases = DeviceProfileRelease::where('profile_id', '=', $profile_id)->get();
$release_ids = array();
foreach ($profile_releases as $profile_release)
{
$release_ids[] = $profile_release->release_id;
}
$repository = app('App\Interfaces\ReleaseRepository');
$repository->setPresenter(ReleasePresenter::class);
$releases = $repository->find($release_ids);
return $this->respondWithSuccess($releases);
} catch (\Exception $error) {
return $this->respondInternalError($error->getMessage());
}
}