在我的Laravel 5.7应用程序中,我想使用elasticsearch,我发现了这一点 https://michaelstivala.com/learning-elasticsearch-with-laravel/篇文章。 首先,我想从要与elasticsearch一起使用的表中导入所有数据 1)我创建了一个包装文件app / Elastic.php,其中的内容来自githubusercontent。这个文件的目录正确吗?
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()
]);
}
});
}
因为我有种子填充器,用于填充初始数据。但是调用此方法时出现错误:
Class App\App\Elastic\Elastic does not exist
为什么出错以及如何解决?
实际上这行
$elastic = app(App\Elastic\Elastic::class);
是我的幼虫经验的背后...
谢谢!
答案 0 :(得分:1)
与Laravel / Elasticsearch无关,而与PHP命名空间和PSR-4自动加载有关。
如果您查看Laravel应用的composer.json
文件,您会发现……。喜欢
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
这意味着您要遵循/app
目录中名称空间的PSR-4规范。基本上,这意味着您的文件夹结构必须与名称空间层次结构相对应。
因此,问题1:您提到App\Elastic\Elastic
中有一个/app/Elastic.php
类。您的PSR-4自动加载器无法加载此类,它应在/app/Elastic/Elastic.php
的{{1}}或命名空间App\
中声明。
问题2:致电
$elastic = app(App\Elastic\Elastic::class);
在名称空间中,例如App/
会按照错误说明解析为App/App
。
为避免这种情况,请按照Anar的建议使用\App\Elastic\Elastic::class
,或通过 use 语句导入类。