PHP Laravel получает все вопросы из таблицы вопросов на внешнем ключе таблицы голосования - PullRequest
0 голосов
/ 09 октября 2019

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

Я хочу получить вопросы, на которые есть ссылки из таблицы голосования " question_id ".

Таблица вопросов:

id(PK)| title | description | created_at | updated_at
  • Модель вопроса имеет много голосов

    class Question extends Model
    {
      public function votes()
      {
        return $this->hasMany(Vote::class, 'question_id');
      }
    }
    

Таблица голосов:

id(PK) | answer_id(FK) | question_id(FK) | user_id(FK)
  • Модель голосования принадлежит вопросу

    class Vote extends Model
    {
      public function question()
      {
        return $this->belongsTo(Question::class, 'question_id');
      }
    }
    

Метод фильтра : возвратит все проголосовавшие вопросы вместе с голосами (я хочу только вопросы)

public function filtered()
    {
        $user_id = Auth::user()->id;
        $votes = Vote::with('question')->where('user_id', $user_id)->get();
        $votes->makeVisible('question');
        return response()->json($votes);
    }

Мне удалось получить все "проголосовавшие вопросы" с помощью Модели голосования. но я хотел бы получить только вопрос.

Текущий результат : голоса с проголосовавшими вопросами

 [
    {
        "id": 1,
        "question_id": 1,
        "answer_id": 2,
        "user_id": 1,
        "question": {
            "id": 1,
            "title": "a question this user voted",
        }
    },
    {
        "id": 2,
        "question_id": 2,
        "answer_id": 3,
        "user_id": 1,
        "question": {
            "id": 2,
            "title": "another question this user voted",
        }
    }
]

Желаемый результат : только проголосовавшие вопросы

 [
     {
       "id": 1,
       "title": "a question this user voted",
     },
     {
       "id": 2,
       "title": "another question this user voted",
    }
]

возможно ли это? в противном случае любой совет будет оценен

1 Ответ

1 голос
/ 09 октября 2019

Вы можете получить все голоса за пользователя, например, так:

User.php

public function votes()
{
    return $this->hasMany('App\Vote`);
}

И вы можете получить все вопросы по таким голосам:

Голосовать.php

public function questions()
{
    return $this->belongsTo('App\Question');
}

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

$user = Auth::user();
$userVotes = $user->votes()
    ->with('questions')
    ->get()
    ->pluck('question.id', 'question.title');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...