大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

Laravel ページネーショントラブルの解決②(謎のダブり)

まだ解決できない謎のダブり問題。

前回の経緯↓

rintaro2019.hatenablog.com

 

・links()にしても->render('pagination::bootstrap-4')にしてもダブる。

・$cards = $user->good_cards()->groupBy(\DB::raw('user_id'));

 →エラー:SQLSTATE[42000]: Syntax error or access violation: 1055 'dictionary.cards.id' isn't in GROUP BY・・・

(もちろん下記も

 $cards = $user->good_cards()->groupBy('user_id');

 $cards = $user->good_cards()->groupBy('good_user_id'); )

・$cards = $user->good_cards()->distinct():

 →つけてもつけなくても変化なし

・$cards = $user->good_cards()->groupBy('card_id');

SQLSTATE[42000]: Syntax error or access violation: 1055 'dictionary.cards.id' isn't in GROUP BY (SQL: select `cards`.*, `good`.`good_user_id` as `pivot_good_user_id`, `good`.`card_id` as `pivot_card_id`, `good`.`created_at` as `pivot_created_at`, `good`.`updated_at` as `pivot_updated_at` from `cards` inner join `good` on `cards`.`id` = `good`.`card_id` where `good`.`good_user_id` = 3 group by `card_id` order by RAND(1) limit 1 offset 0)

・$cards = $user->good_cards()->groupBy('cards.id');

SQLSTATE[42000]: Syntax error or access violation: 1055 'dictionary.cards.user_id' isn't in GROUP BY (SQL: select `cards`.*, `good`.`good_user_id` as `pivot_good_user_id`, `good`.`card_id` as `pivot_card_id`, `good`.`created_at` as `pivot_created_at`, `good`.`updated_at` as `pivot_updated_at` from `cards` inner join `good` on `cards`.`id` = `good`.`card_id` where `good`.`good_user_id` = 3 group by `cards`.`id` order by RAND(1) limit 1 offset 0)

・$cards = $user->good_cards()->groupBy('cards.id', 'cards.user_id');

SQLSTATE[42000]: Syntax error or access violation: 1055 'dictionary.cards.japanese' isn't in GROUP BY (SQL: select `cards`.*, `good`.`good_user_id` as `pivot_good_user_id`, `good`.`card_id` as `pivot_card_id`, `good`.`created_at` as `pivot_created_at`, `good`.`updated_at` as `pivot_updated_at` from `cards` inner join `good` on `cards`.`id` = `good`.`card_id` where `good`.`good_user_id` = 3 group by `cards`.`id`, `cards`.`user_id` order by RAND(1) limit 1 offset 0)

・ $cards = $user->good_cards()->select('cards.id', 'cards.user_id', 'cards.japanese', 'cards.english')->groupBy('cards.id', 'cards.user_id', 'cards.japanese', 'cards.english');
  audience_selectorがないエラー(select文は意味なし)

・ $cards = $user->good_cards()->groupBy('cards.id', 'cards.user_id', 'cards.japanese', 'cards.english', 'cards.audience_selector', 'cards.phonetic', 'cards.created_at', 'cards.updated_at', 'good.good_user_id', 'good.card_id', 'good.created_at', 'good.updated_at'); →エラーが出なくなるまでやり続けた

→ダブる!!!

・下記を参考にLaravelフォルダ/config/database.php

mysqlの'strict'をtrue→falseに変更。

https://zero-lara.com/2018/04/15/post-259/

もう一回$cards = $user->good_cards()->groupBy('cards.id');してみる。

→できたけどpagesが1になる。カード数のカウントも1になる。ダブる。しかも毎回同じ順番になる。

・後の方を変えてみる。

$cards = $cards->groupBy('cards.id')->inRandomOrder($pages)->paginate(1);に。

→pagesが複数になる。my_cardsの方はできるけどやはりgoodの方はダブる。(毎回同じにはならない)

・simplePaginateにしてもダブる。

分かったこと

 ・ビューのページネーションは<div class="container"></div>の中(末尾)に入れても直後に入れても機能する。

・simplePaginate()のページネーション{{ $cards->links() }}は<div class="container"></div>の中(末尾)に入れないと機能しない。直後はエラーになる。

→諦め。