自Laravel 5.3更新后,当我更新数据库

时间:2016-09-28 07:45:58

标签: php laravel laravel-5 laravel-5.3

这是一个非常奇怪的问题。我有一个完美的Laravel 5.2应用程序。然后我更新到Laravel 5.3以使用新的广播功能,我面临一个大问题。

当我更新数据(使用我的申请表格或直接在我的数据库中)时,会正确更新注释。我尝试清除缓存,视图和配置,但没有任何变化......我需要去其他一些页面并通过显示数据完成......

我有一个Campaign模型和一个列出广告系列的页面。当我直接在数据库中删除条目时,列表不会在前面更改。此外,当我使用dd等调试函数时,结果告诉我数据没有改变......

还有其他人面临同样的问题吗?

我已按照迁移指南将5.2更新为5.3,也许我忘记了某些内容......

这是我的.env文件的一部分:

DB_CONNECTION=mysql
BROADCAST_DRIVER=redis
CACHE_DRIVER=array
SESSION_DRIVER=file
QUEUE_DRIVER=database

谢谢!

2 个答案:

答案 0 :(得分:1)

感谢您分享这些问题。

Laravel成功升级到5.3版本,并且有一些弃用和应用程序服务提供商,还增加了一些新功能,如护照。

你的问题是有观点的。据我所知,您需要从" boot"中删除参数。 EventServiceProvider

中提供的RouteServiceProviderAuthServiceProviderapp/provider/remove_the_arguments_from_boot_method_given_file中编写的方法

在Laravel 5.2中:

 public function boot(GateContract $gate)
    {
        $this->registerPolicies($gate);
    }

但是在Laravel 5.3中:

 public function boot()
    {
        parent::boot();

    }

请参阅Laravel 5.3 docs

我希望,这适合你。

谢谢和问候。

答案 1 :(得分:0)

永远不要在会话中存储完整模型,它可能导致应用程序中显示旧数据!

经过一天的搜索和重构后,我发现了我原来的问题!

这是一个简单的session()语句,导致我的应用程序显示无效数据。

历史

仪表板显示链接到客户端的广告系列列表。用户可以管理多个客户端,因此我将当前客户端置于会话中以了解当前使用的客户端。

这里的错误是我将整个客户端模型放在会话中,所以当我读取会话并检索数据时,也会检索所有关系。

客户端是访问我的应用程序中数据的中心点。我检索链接到我的客户的广告系列,所有内容都与之相关。

这里的恶性功能:

/**
 * Retrieve the current client instance when the user is connected
 * @return App\Client|null
 */
protected function retrieveCurrentClient()
{
    $client = null;

    if (Gate::allows('manage-clients')) {
        if (null === $client = session('currentClient')) {
            $client = Client::all()->first();
            session(['currentClient' => $client]);
        }
    } elseif (Auth::guard()->check()) {
        $client = Auth::guard()->user()->client;
    }

    return $client;
}

事实上,当我在Gate定义中挖掘时,问题出现了。如果我删除它们,我的应用程序将重新开始工作......

解决方案

我只是将函数更改为存储在会话客户端ID中而不是完整的模型。然后我在我的应用程序的每个页面中检索新数据。

/**
 * Retrieve the current client instance when the user is connected
 * @return App\Client|null
 */
protected function retrieveCurrentClient()
{
    $client = null;

    if (Gate::allows('manage-clients')) {
        if (null === $client_id = session('client_id')) {
            $client = Client::all()->first();
            session(['client_id' => $client->id]);
        } else {
            $client = Client::findOrFail($client_id);
        }
    } elseif (Auth::guard()->check()) {
        $client = Auth::guard()->user()->client;
    }

    return $client;
}

不知道是否可以帮助别人避免这些错误,但很高兴能找到答案!