テーブル mtb_product_list_order_by に項目を追加
「お気に入り登録数」の項目を追加
rankを設定
src/Eccube/Repository/ProductRepository.php
// お気に入り登録数順
} else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == 8) {
$qb->addSelect('COUNT(cfp.id) as HIDDEN favorite'); // カウント(お気に入り登録)を favoriteに代入
$qb->innerJoin('p.ProductClasses', 'pc');
$qb->leftJoin('p.CustomerFavoriteProducts', 'cfp'); // leftjoin でテーブルの外部結合 どちらか片方のテーブルにデータがあればレコードが取得される。
$qb->groupBy('p.id');
$qb->orderBy('favorite', 'DESC'); // お気に入り登録(降順)
$qb->addOrderBy('p.id', 'ASC'); // 品番(昇順)
カウント(お気に入り登録)をfavoriteに代入
leftjoin でテーブルの外部結合
どちらか片方のテーブルにデータがあればレコードが取得される。
以上で、商品一覧ページのドロップダウンに「お気に入り数順」が追加され、選択するとお気に入りに追加された数の多い商品順にソートされる。