Как laravel управляет множественным объединением в запросе БД

#mysql #sql #laravel

#mysql #sql #laravel

Вопрос:

У меня есть 3 запроса объединения в моем Laravel, запрос работает в SQL, но в Laravel он не будет. и отображает эту ошибку:

 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'union all 
  

вот как выглядит код.

 $android = DB::connection("mysql2")->table('android')
     ->join('game_players', 'game_players.id', '=', 'android.playerId')
     ->select("android.playerId", "android.dateAdded", "android.identifier")
     ...
     ->where("android.dateAdded", "<>", '');

$ios = DB::connection("mysql2")->table('ios')
     ->join('game_players', 'game_players.id', '=', 'ios.playerId')
     ->select("ios.playerId", "ios.dateAdded", "ios.identifier")
     ...
     ->unionAll($android);

$steam = DB::connection("mysql2")->table(steam')
     ->join('game_players', 'game_players.id', '=', 'steam.playerId')
     ->select("playerId", "dateAdded", "identifier")
     ...
     ->unionAll($ios)
     ->get();
  

Я действительно понятия не имею, что вызывает эту ошибку, но, возможно, из-за того, что я вызвал объединение в 3 раза? есть идеи по этому поводу?

Объединение работает, если их всего два, но когда я добавил третий, он выдал ошибку

Ответ №1:

мои ошибки.. это ответ:

 $android = DB::connection("mysql2")->table('android')
     ->join('game_players', 'game_players.id', '=', 'android.playerId')
     ->select("android.playerId", "android.dateAdded", "android.identifier")
     ...
     ->where("android.dateAdded", "<>", '');

$ios = DB::connection("mysql2")->table('ios')
     ->join('game_players', 'game_players.id', '=', 'ios.playerId')
     ->select("ios.playerId", "ios.dateAdded", "ios.identifier")
     ...


$steam = DB::connection("mysql2")->table(steam')
     ->join('game_players', 'game_players.id', '=', 'steam.playerId')
     ->select("playerId", "dateAdded", "identifier")
     ...
     ->union($ios)
    ->union($android);
     ->get();

  

Ответ №2:

Пожалуйста, попробуйте использовать отношения модели eloquent вместо DB.