在我的Laravel-5.8项目中,我有这张桌子:
CREATE TABLE `appraisal_goal_types` (
`id` int(11) NOT NULL,
`name` varchar(200) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
`max_score` int(11) DEFAULT 0,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
在表中,如果parent_id为null,则该行为父级。每个子字段都有其parent_id。父级可以有许多子行。另外,只有父级才能具有max_score的值。子级的max_score默认值为0
在我的视图刀片中,我有一个下拉列表,该下拉列表只会填充子字段。
我已经在控制器中编写了此功能
public function maxScore(Request $request)
{
$data = DB::table('appraisal_goal_types')->select('max_score')->where('id', $request->id)->first();
return response()->json($data);
}
当选择了子场,我想要加载其父的MAX_SCORE。
如何完成上面函数中的代码,以选择所请求的孩子ID的父对象的max_score。
谢谢。
答案 0 :(得分:2)
使用条件语句获取max_score
:
public function maxScore(Request $request)
{
$item = DB::table('appraisal_goal_types')->find($request->id) or abort(404);
$return['max_score'] = $item->parent_id == null ? $item->max_score : 0;
return response()->json($return);
}
如果$request->id
是孩子,并且您在模型中没有关系,则可以使用:
public function maxScore(Request $request)
{
$child = DB::table('appraisal_goal_types')->find($request->id) or abort(404);
$parent = DB::table('appraisal_goal_types')->select('max_score')->find($child->parent_id);
return response()->json($parent);
}
或者您可以添加关联方法:
您的模型
public function parent()
{
return $this->hasOne(Model::class, 'id', 'parent_id');
}
一旦定义了关系,就可以检索父对象:
public function maxScore(Request $request)
{
$child = Model::find($request->id) or abort(404);
$parent['max_score'] = $child->parent->max_score;
return response()->json($parent);
}
答案 1 :(得分:0)
这样做吧:
public function maxScore(Request $request)
{
$child = DB::table('appraisal_goal_types')->find($request->id);
if($child) {
$data['child'] = $child;
$data['parent'] = DB::table('appraisal_goal_types')->select('max_score')->find($child->parent_id);
}
return response()->json($data);
}