在我的Laravel5.7应用程序中,我想使用elasticsearch,我找到了这篇https://michaelstivala.com/learning-elasticsearch-with-laravel/文章。首先,我想从我想要与elasticsearch一起使用的表中导入所有数据。1)我创建了一个包装文件app/Elastic.php,其中包含了githubusercontent的内容。这是适合这个文件的dir吗?
2)在我的模型app/Vote.php中添加了函数
公共静态函数bulkVotesToElastic() {
$elastic = app(App\Elastic\Elastic::class);
Vote::chunk(100, function ($Votes) use ($elastic) {
foreach ($Votes as $Vote) {
$elastic->index([
'index' => 'select_vote',
'type' => 'vote',
'id' => $Vote->id,
'body' => $Vote->toArray()
]);
}
});}
因为我有填充init数据的播种机。但是调用这个方法我得到了错误:
Class App\App\Elastic\Elastic does not exist为什么出错,以及如何修复?
实际上这条线
$elastic = app(App\Elastic\Elastic::class);背后是我的拉拉补偿..。
谢谢!
发布于 2018-11-13 22:45:03
与其说是关于Laravel / Elasticsearch的问题,不如说是关于PHP名称空间和PSR-4自动加载的问题。
如果你看一下你的Laravel应用程序的composer.json文件,你会发现一些东西。喜欢
"autoload": {
"psr-4": {
"App\\": "app/"
}
}这意味着您希望在您的PSR-4目录中遵循名称空间的/app规范。基本上,这意味着您的文件夹结构必须与您的命名空间层次结构相对应。
因此,,问题1:您提到的在/app/Elastic.php中有一个类App\Elastic\Elastic的。这个类不能由PSR-4自动加载程序加载,它应该在/app/Elastic/Elastic.php中或者在命名空间App\中声明。
问题2:调用时的
$elastic = app(App\Elastic\Elastic::class);在名称空间中,例如App/,它会按照错误说明被解析为App/App。为了避免这种情况,按照Anar的建议使用\App\Elastic\Elastic::class,或者通过use语句导入类。
https://stackoverflow.com/questions/53138808
复制相似问题