Laravel 5.3
我知道会发生什么。在我的AppServiceProvider的启动功能中,我有代码共享所有视图的数据:
&
但是,如果没有这样的表(在DB重置之后),则抛出异常
$unread_messages = count(Message::where('status', 0)->get());
View::share('unread_messages', $unread_messages);
如果我在启动功能中注释该代码,那就没关系,并且所有php artisan命令都正常工作。
我尝试了以下内容:
[Illuminate\Database\QueryException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lara53.messages' doesn't
exist (SQL: select * from `messages` where `status` = 0)
[PDOException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lara53.messages' doesn't
exist
它会抛出相同的错误。我也试过这个:
try
{
$unread_messages = count(Message::where('status', 0)->get());
View::share('unread_messages', $unread_messages);
} catch (Exception $e)
{
$e->getMessage();
}
但它没有任何共享。
我该如何处理?
答案 0 :(得分:0)
您可以使用视图编辑器,以便在加载提供程序时不会立即执行查询。而是注册视图编辑器,只有在视图实际需要时才会执行查询。
答案 1 :(得分:0)
这不是对服务提供商的良好使用,服务提供商通常用于引导应用程序的需求,例如第三方软件包。正如您所看到的,将查询与视图共享数据在服务提供者中效率不高,因为它们在每个单一请求上运行(如果您只是使用控制台,为什么还需要运行该查询?)
相反,您应该将此代码放入中间件,同时考虑是否应该采用RobertTrzebiński的建议并将其放在视图编写器中以及该中间件内部。