首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用mongodb获取错误:在null上调用成员函数prepare()

用mongodb获取错误:在null上调用成员函数prepare()
EN

Stack Overflow用户
提问于 2018-11-16 05:12:52
回答 2查看 1.5K关注 0票数 2

我在和鲁门和mongodb合作

我希望根据文件夹获取(总未读)和总消息计数。

我的mongodb查询如下,

代码语言:javascript
复制
$totalEmails = DB::connection('mongodb')
        ->select("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
        ->collection('email_message')
        ->where('email_account_id', (int)$request->email_account_id)
        ->where('status', "Active")
        ->groupBy("folder_id")
        ->get();

它给了我以下的错误,

代码语言:javascript
复制
FatalErrorException in Connection.php line 333:
Call to a member function prepare() on null

请帮我解决这个issue.thank你。

我已经通过更改查询来解决该错误,如下所示,

代码语言:javascript
复制
$totalEmails = DB::connection('mongodb')            
            ->collection('email_message')
            ->select("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
            ->where('email_account_id', (int)$request->email_account_id)
            ->where('status', "Active")
            ->groupBy("folder_id")
            ->get();

但这并没有给我预期的结果,

它给我的结果如下,

代码语言:javascript
复制
[_id] => Array
            (
                [folder_id] => 5bee461e19f043020c001844
            )

    [folder_id] => 5bee461e19f043020c001844
    [sum(if(is_read==0,1,0)) as unread] => 
    [count(message_id) as total] => 

但我的期望是

代码语言:javascript
复制
[_id] => Array
            (
                [folder_id] => 5bee461e19f043020c001844
            )

    [folder_id] => 5bee461e19f043020c001844
    [unread] => 2
    [total] => 10

你能告诉我查询哪里不对吗?

如果我使用下面的查询

代码语言:javascript
复制
$totalEmails = DB::connection('mongodb')
    ->selectRaw("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
    ->collection('email_message')
    ->where('email_account_id', (int)$request->email_account_id)
    ->where('status', "Active")
    ->groupBy("folder_id")
    ->get();

它给了我一个错误,

代码语言:javascript
复制
ErrorException in Builder.php line 245:
Argument 2 passed to Illuminate\Database\Query\Builder::selectRaw() must be of the type array, string given,

如果我使用下面的查询,

代码语言:javascript
复制
 $totalEmails = DB::connection('mongodb')        
        ->collection('email_message')
        ->selectRaw("sum(if(is_read==0,1,0)) as unread,count(message_id) as total,folder_id")
        ->where('email_account_id', (int)$request->email_account_id)
        ->where('status', "Active")
        ->groupBy("folder_id")
        ->get();

它给我的结果是,

代码语言:javascript
复制
[_id] => Array
                (
                    [folder_id] => 5bee461e19f043020c001844
                )

            [folder_id] => 5bee461e19f043020c001844
            [sum(if(is_read==0,1,0)) as unread,count(message_id) as total,folder_id] => 

请帮我得到我的预期结果

EN

Stack Overflow用户

发布于 2018-11-16 05:26:52

我不确定这是否是导致您的问题的原因,但是您的代码中有一个错误。

它应该是:

代码语言:javascript
复制
$totalEmails = DB::connection('mongodb')
    ->selectRaw("sum(if(is_read==0,1,0)) as unread, count(message_id) as total, folder_id")
    ->collection('email_message')
    ->where('email_account_id', (int)$request->email_account_id)
    ->where('status', "Active")
    ->groupBy("folder_id")
    ->get();

selectRaw需要在select中包含原始代码。这是获得更多信息的文档

https://laravel.com/docs/5.5/queries#raw-expressions

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53331812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档