Laravel-如何获得孩子的相关父母的max_score

时间:2020-03-02 15:08:02

标签: laravel

在我的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。

谢谢。

2 个答案:

答案 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);
}

您可以看到我的答案https://stackoverflow.com/a/60373514/984422

答案 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);
}