laravel - 我如何将 paginate() 函数与 db::select 一起使用
问题描述
首先,我对如何通过简单查询使用分页功能感兴趣。例如,我有这个查询:
$query = "SELECT
dw.id,
w.word,
d.definition,
dw.user_id,
IF(IFNULL(dw.definition_id, 0) = 0,
(SELECT COUNT(phrase_id)
FROM phrase_word wp1 WHERE wp1.user_id = dw.user_id AND wp1.word_id = dw.word_id),
(SELECT COUNT(phrase_id)
FROM phrase_word wp2 WHERE wp2.user_id = dw.user_id AND wp2.word_id = dw.word_id AND wp2.definition_id = dw.definition_id)
) phrases_count
FROM definition_word AS dw
INNER JOIN words AS w ON w.id = dw.word_id
LEFT JOIN definitions AS d ON d.id = dw.definition_id
WHERE dw.user_id = 2";
我不能以这种方式使用分页方法。
$unknown_words = DB::select($query)->paginate(5);
或者如果有可能如何转换
"IF(IFNULL(dw.definition_id, 0) = 0,
(SELECT COUNT(phrase_id)
FROM phrase_word wp1 WHERE wp1.user_id = dw.user_id AND wp1.word_id = dw.word_id),
(SELECT COUNT(phrase_id)
FROM phrase_word wp2 WHERE wp2.user_id = dw.user_id AND wp2.word_id = dw.word_id AND wp2.definition_id = dw.definition_id)
) phrases_count";
将这部分查询放入查询构建器中。
解决方案
我认为你有一个更好的选择,你可以使用 laravel joins select 和 table 方法,你可以实现你想要的输出,如下所示。
$unknown_words = DB::table('definition_word as dw')
->join('words as w', 'w.id', '=', 'dw.word_id')
->leftJoin('definitions as d', 'd.id', '=', 'dw.definition_id')
->select(
'dw.id',
'w.word',
'd.definition',
'dw.user_id',
DB::raw('IF(IFNULL(dw.definition_id, 0) = 0,
(SELECT COUNT(phrase_id)
FROM phrase_word wp1 WHERE wp1.user_id = dw.user_id AND wp1.word_id = dw.word_id),
(SELECT COUNT(phrase_id)
FROM phrase_word wp2 WHERE wp2.user_id = dw.user_id AND wp2.word_id = dw.word_id AND wp2.definition_id = dw.definition_id)
) as phrases_count')
)->where('dw.user_id', 2)->paginate(15)
推荐阅读
- windows - powershell 将数组传递给另一个函数
- c++ - C++ std::scoped_lock:如果锁阻塞会发生什么?
- html - wxpython - 使用 treectrl 将本地 html 文件加载到面板中
- greenplum - gpload - 一致的互连超时
- python - 如何处理 boost::python 中的类向量
- rest - 如何定义哈希图
> 在招摇 yaml - changelog - 在重写 Debian 软件包后,您通常如何做软件包名称或更改日志?
- spring - 兼容 Spring Boot 2.5.5 的 Spring Cloud 版本
- tmux - tmuxinator 仅正确运行第一个窗格的命令
- javascript - 如何合并一组geojson项目的坐标值?