我如何在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";

将这部分查询放入查询生成器中。

iCMS 回答:我如何在db :: select中使用paginate()函数

我认为您有一个更好的选择,可以使用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)
本文链接:https://www.f2er.com/1651081.html

大家都在问