Laravel - Как получить max_score связанного родителя ребенка - PullRequest
0 голосов
/ 02 марта 2020

В моем проекте 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 равен нулю, тогда строка является родительской. Каждое дочернее поле будет иметь свой parent_id. Родитель может иметь много дочерних строк. Кроме того, только родитель может иметь значение для max_score. У дочернего элемента будет 0 по умолчанию для max_score

. В моем блэйде просмотра у меня есть раскрывающийся список, который будет заполняться только дочерними полями.

Я написал эту функцию в моем контроллере

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 его родителя.

Как мне выполнить код в функции выше, чтобы выбрать max_score родителя запрашиваемого ID ребенка.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Используйте условное выражение, чтобы получить 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);
}

Вы можете увидеть мой ответ { ссылка }

0 голосов
/ 02 марта 2020

так сделайте вот так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...