Laravel найти в БД где ('week', $ week) и где ('user_id', $ user_id) найти идентификатор - PullRequest
1 голос
/ 19 марта 2020

Я создаю приложение, в котором пользователи могут начать вызов, чтобы увидеть, кто больше всего теряет вес.

Существует 1 таблица вызовов с идентификатором user_id (fk), весом и неделей. Чтобы отобразить их во внешнем интерфейсе за неделю, я создал новый массив.

UserController:

    public function index()
    {
        $users = User::all();

        // get all challanges descending
        $challanges = Challange::orderBy('week', 'DESC')->get();


        // make an array for every [week] that has an array with ['user' => 'weight'] in user_id order
        $weightArray = array();

        // how long is the list depending on amount of weeks
        $startweek = 1;
        $endweek = Challange::max('week');

        // go through every week
        for ($i = $startweek; $i <= $endweek; $i++) {

            // get weight foreach user and if no value set 0
            foreach ($users as $user) {

                // get challange values per week
                $challenge = $user->challanges()->where('week', '=', $i)->get();

                // if there is a challange
                if (count($challenge) > 0) {
                    // set a weight value for that user *!!FIX make weigt alue unique!!*
                    $weightArray[$i][$user->id] = $challenge[0]->weight;
                }
                else {
                    // set 0 if no weight isset
                    $weightArray[$i][$user->id] = 0;
                }
            }
        }

        return view('dashboard', compact('users', 'weightArray'));
    }

Когда пользователь вошел в систему и нажал update, появляется форма, которая дает скрытый ввод Auth :: user () -> идентификатор и неделя. Вес, который пользователь должен ввести сам. Это возвращает запрос, но теперь я не знаю, как сопоставить неделю и user_id, чтобы найти идентификатор, где необходимо обновить вес.

ChallangeController:

public function update(Request $request)
    {
        $week = $request->week;
        $challange = Challange::find($request->user_id)->where('week', $week);
        dd($challange);
    }

Это возвращает: Ошибка вызова функции-члена, где () в null

Должен ли я добавить идентификатор в массив заранее? Или я где ('user_id', $ user_id) и сделать другое где в массиве, который возвращает?

Я не знаю, что делать. Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 19 марта 2020

Неправильный заказ. Вы должны:

$challange = Challange::where('week', $week)
    ->where('user_id', $request->user_id)
    ->first();

// or

$challange = Challange::where([
    'week' => $week, 
    'user_id' => $request->user_id
])->first();
...