eloquent laravel: How to get a row count from a ->get()

后端 未结 4 1303
花落未央
花落未央 2021-02-02 05:32

I\'m having a lot of trouble figuring out how to use this collection to count rows.

$wordlist = \\DB::table(\'wordlist\')->where(\'id\', \'<=\', $correcte         


        
4条回答
  •  太阳男子
    2021-02-02 05:48

    Answer has been updated

    count is a Collection method. The query builder returns an array. So in order to get the count, you would just count it like you normally would with an array:

    $wordCount = count($wordlist);
    

    If you have a wordlist model, then you can use Eloquent to get a Collection and then use the Collection's count method. Example:

    $wordlist = Wordlist::where('id', '<=', $correctedComparisons)->get();
    $wordCount = $wordlist->count();
    

    There is/was a discussion on having the query builder return a collection here: https://github.com/laravel/framework/issues/10478

    However as of now, the query builder always returns an array.

    Edit: As linked above, the query builder now returns a collection (not an array). As a result, what JP Foster was trying to do initially will work:

    $wordlist = \DB::table('wordlist')->where('id', '<=', $correctedComparisons)
                ->get();
    $wordCount = $wordlist->count();
    

    However, as indicated by Leon in the comments, if all you want is the count, then querying for it directly is much faster than fetching an entire collection and then getting the count. In other words, you can do this:

    // Query builder
    $wordCount = \DB::table('wordlist')->where('id', '<=', $correctedComparisons)
                ->count();
    
    // Eloquent
    $wordCount = Wordlist::where('id', '<=', $correctedComparisons)->count();
    

提交回复
热议问题