Arhn - архитектура программирования

Laravel: доступ к таблице отношений

Мне нужно вернуть список миссий и текущий прогресс пользователя для каждой миссии. Для этого я создал следующее красноречивое выражение:

return DailyMission::with('userProgress')->get();

Используя следующую связь в моей модели DailyMission (таблица daily_missions):

public function userProgress() {
        return $this->hasOne(UserDailyMission::class,'mission_id');
    }

Проблема в том, что он не указан пользователем, что означает, что я получаю первый прогресс случайного пользователя в моей базе данных.

Я попытался изменить выражение на это:

return DailyMission::with('userProgress')
        ->where('user_daily_missions.user_id',$user->id)
        ->get();

но я получаю следующую ошибку:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_daily_missions.user_id' in 'where clause

Прогресс пользователя хранится в таблице user_daily_missions с использованием следующей структуры:

id | user_id | mission_id | current_progress

Любые идеи, как вывести прогресс текущего пользователя вместо случайного пользователя? Что-то не так со структурой?


  • Попробуйте использовать with(['userProgress' => function($q) use ($user){ $q->where('user_id',$user->id);}]) вместо ->where('user_daily_missions.user_id',$user->id) 16.03.2017
  • у вас есть $user в вашей функции? 16.03.2017
  • @NarendrasinghSisodia Спасибо! Потрясающий! 16.03.2017

Ответы:


1

Для получения данных с определенным условием в Eloquent. Laravel предоставил возможность использования функции closure/callback, которая будет связана с вашим relationship, определенным в вашем Model. Итак, здесь вы можете просто передать closure с дополнительным условием, например

return DailyMission::with([
   'userProgress' => function($q) use ($user){ 
      $q->where('user_id',$user->id);
}])->get();
16.03.2017

2

Попробуй это,

Я не знаю, как получить ваш идентификатор пользователя, но это должно работать:

 $mission = DailyMission::with('userProgress')->where('id', 'theuserid')->first();

  return $mission;
16.03.2017

3

@TheUnreal, не могли бы вы попробовать, используя приведенный ниже код.

return DailyMission::whereHas('userProgress', function($q) use ($user) {
    $q->where('user_id', $user->id);
})->get();
16.03.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..