如何解决我如何在db :: select中使用paginate函数
首先,我对如何通过简单查询使用paginate函数感兴趣。 例如,我有以下查询:
$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,(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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。