0

显示错误

{消息:“在 null 上调用成员函数 prepare()”,...} 异常:“Symfony\Component\Debug\Exception\FatalThrowableError”文件:“/var/www/html/broc/vendor/laravel/framework/src /Illuminate/Database/Connection.php”行:326 消息:“在 null 上调用成员函数 prepare()”跟踪:[,…]

4

2 回答 2

0

首先,您需要调试您正在使用正确的数据库。

文件:

vendor/laravel/telescope/src/Http/Controllers/EntryController.php
function : index()

dd($storage)  //show dump 

输出应该是:

DatabaseEntriesRepository {#1671 #connection: "mongodb"
#monitoredTags: null }

在那之后

您需要扩展EntryModel其中的 vendor/laravel/telescope/src/Storage/DatabaseEntriesRepository.php

望远镜包的位置并在那里设置 moloquent 连接。

现在应该使用Moloquent而不是这样使用的Eloquent

//use Illuminate\Database\Eloquent\Model;

use Moloquent as Model;

class EntryModel extends Model

有关更多详细信息,请点击以下链接

https://thewebtier.com/php/complete-guide-for-implementing-laravel-telescope-with-mongodb/
于 2018-12-12T06:02:10.690 回答
0

从问题日期算起一年,使用 Laravel 6,选择的答案还不够。

解决问题需要2个步骤:

1-正如@Yuvraj 提到的那样改变扩展模型Laravel\Telescope\Storage\EntryModel

//use Illuminate\Database\Eloquent\Model;

use Moloquent as Model;

class EntryModel extends Model

2- 在同一个类中是一个函数,它通过请求中发送的选项来限定查询范围:

    public function scopeWithTelescopeOptions($query, $type, EntryQueryOptions $options)
    {
        $this->whereType($query, $type)
                ->whereBatchId($query, $options)
                ->whereTag($query, $options)
                ->whereFamilyHash($query, $options)
                ->whereBeforeSequence($query, $options)
                ->filter($query, $options);

        return $query;
    }

filter函数检查记录是否将属性should_display_on_index设置为 true,该属性在迁移中设置为默认值: $table->boolean('should_display_on_index')->default(true); 但是由于使用了 mongoDB,因此不遵守默认参数,因此不会将其添加到记录中。

要解决此问题,您有两种选择:

a) 注释掉前面提到的函数中对过滤器的调用:

    public function scopeWithTelescopeOptions($query, $type, EntryQueryOptions $options)
    {
        $this->whereType($query, $type)
                ->whereBatchId($query, $options)
                ->whereTag($query, $options)
                ->whereFamilyHash($query, $options)
                ->whereBeforeSequence($query, $options)
                /*->filter($query, $options)*/;

        return $query;
    }

但是,如果您打算稍后通过将 设置should_display_on_index为 false 来使用过滤器,则需要修改过滤器函数:

 protected function filter($query, EntryQueryOptions $options)
    {
        if ($options->familyHash || $options->tag || $options->batchId) {
            return $this;
        }

        // $query->where('should_display_on_index', true);
        $query->where('should_display_on_index', '!=', false);

        return $this;
    }
于 2019-12-25T12:35:01.980 回答