Laravel как запросить идентификатор авторизации из другой таблицы - PullRequest
1 голос
/ 27 апреля 2020

У меня есть forms_table, где я запрашиваю все свои результаты для аутентифицированного пользователя, где Auth::id() в user_id столбце.

Каждая из этих строк имеет boolean столбец alternation. Если это 1, то это означает, что в другой таблице есть строка с именем form_alternation, где у меня есть Auth::id(). Это означает, что Auth::id() не существует в начальном forms_table.

Как я могу извлечь строки из forms_table с предложением where where('user_id', Auth::id()) и показать строки, в которых Auth::id() существует в form_alternations?

В настоящее время у меня есть это, и он показывает мне 0 строк, потому что последнее предложение Auth::id().

   $baseQuery->with(['alternated' => function($q){
         $q->where('user_id', Auth::id());
      }]);
   $baseQuery->where('user_id', Auth::id());

1 Ответ

2 голосов
/ 27 апреля 2020

На мой взгляд, вы хотите, чтобы ваш запрос делал что-то похожее (наполовину псевдокод).

where (forms.user.id = Auth::id() OR (users.alternation = 1 AND alternated.user_id = Auth::id()))

Этого можно добиться с помощью Eloquent, так как я понимаю ваш домен, попробуйте что-то подобное .

use Illuminate\Database\Eloquent\Builder;

// wrap it in where, to avoid other queries precedence ruining the or clause
$query->where(function (Builder $query) {
    // First part, where we assume user id is in forms
    $query->where('user_id', Auth::id());

    // Second part, check alternation or your relationship
    $query->orWhere(function (Builder $query) {
        $query->where('alternation', true);

        // Use whereHas to check if your forms has the user as a relationship
        $query->whereHas('alternated', function (Builder $query) {
            $query->where('user_id', Auth::id());
        });
    });
});

Это должно обеспечить логики c, аналогичные псевдо-примеру, просто используя orWhere() logi c, и вы можете проверить отношения с помощью whereHas().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...