0
特定のジャンルの書籍を検索する機能を作成しています。並べ替え以外はすべて正常に動作し、モデルに追加された「星」によって並べ替えられます。Laravel - ソート方法、追加フィールドの注文
機能:私は、私はエラーを取得する「星」でソートしようとすると
$genre = Genre::find($genre_id);
$phrase = $request->search;
$sort = $request->sort;
$order = $request['order'];
if (!isset($sort) || !in_array($sort, ['title', 'stars', 'created_at', 'author_id']))
$sort = 'title';
if (!isset($order) || !in_array($order, ['DESC', 'ASC']))
$order = 'DESC';
$result['name'] = $genre->name;
$result['results'] = Book::with('authors')->whereGenre_id($genre_id)->where('club_id', '=', $club_id)
->where(function ($query) use ($phrase, $club_id, $sort, $order, $user) {
if (isset($phrase))
$query->where('title', 'LIKE', '%' . $phrase . '%');
})
->orderBy($sort, $order)
->get();
:
Column not found: 1054 Unknown column 'stars' in 'order clause' (SQL: select * from
books
wheregenre_id
= 1 andclub_id
= 24 andbooks
.deleted_at
is null order bystars
desc)
私はこのことを理解し、星がデータベースに存在しませんが、どのように私ができますこれを機能させるには?
を表示するデータベースの構造&モデル –
I 'stars 'がデータベースに存在しないと言うので' $ sort'で 'orderBy'をしてはいけないと思います。 –
星評価はどのように計算されますか?追加された値を並べ替えることの挫折は、データベースから*すべての*結果を最初に取り出し、次に計算された値を追加し、最後にソートする方法で並べ替える必要があるということです。大きな結果セットでは、このアプローチは遅くなることになります。また、DBから正しくページを設定することもできません。コレクションスライスに基づいてカスタムページネーションを作成する必要があります。 – Robert