我正在创建一个搜索特定类型书籍的功能。一切都很好,除了排序,由星星排序'附在模型中。
功能:
$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();
当我尝试按星级排序'我收到一个错误:
未找到专栏:1054未知专栏'明星'在' order子句' (SQL: 从
的空订单books
中选择*,其中genre_id
= 1且club_id
= 24和books
。deleted_at
是stars
desc)
我理解这一点,星星在数据库中不存在,但是我如何才能使它工作?
答案 0 :(得分:1)
这是最终的工作代码:
$res = Book::with('authors')
->where('genre_id', $genre_id)
->where('club_id', $club_id)
->where(function ($query) use ($phrase) {
if (isset($phrase))
$query->where('title', 'LIKE', '%' . $phrase . '%');
})->get();
if($order == 'ASC'){
$res = $res->sortBy($sort);
}else{
$res = $res->sortByDesc($sort);
}
$result['results'] = $res->values()->all();
@mith我将->all()
更改为->get()
,最终结果如下:
$result['results'] = $res->values()->all();