Цепные запросы на выборку в пределах загруженной нагрузки? - PullRequest
0 голосов
/ 25 ноября 2018

Как я могу связать 2 или более выбранных тега в напряженной загрузке?Я использую select, потому что я хочу загрузить только эти 2 столбца, и ничего больше.Перепробовал много вещей.

    $teams = Team::with(['captain' => function($q) {
        $q->select('id', 'name')->where('show_name', true);
        $q->select('id', 'username')->where('show_username', true);
    }])

Очевидно, что первая реализация не будет работать, но она показывает, чего я пытаюсь достичь:

        $q->select('id', 'name', 'username')
          ->where('show_name', true)
          ->orWhere('show_username', true);
    }])

Эта вторая реализация возвращает и name, и username, если show_name или show_username равно true.Я не хочу что-то вроде:

        $q->select('id', 'name')
          ->where('show_name', true)
          ->orWhere() // ??
          ->select('id', 'username')
          ->where('show_username', true);
    }])

Спасибо

1 Ответ

0 голосов
/ 25 ноября 2018

Это невозможно.

Результатом запроса SQL должна быть таблица, поэтому у вас должны быть одинаковые столбцы для каждой строки.Однако вы можете условно указать реальное имя пользователя или значение имени в столбце, как показано ниже:

 $teams = Team::with(['captain' => function($q) {
    $q->select('id', 
         \DB::raw('IF(show_username, username, NULL) as username'),  
         \DB::raw('IF(show_name, name, NULL) as name')
    );
}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...