我在Laravel中创建了一个MongoDB的API,在此记录一下我遇到的问题
你好。最近天气突然变冷了,是吧?
早上我只会开30分钟的暖气!但是因为我要步行去上班、上学,所以到了公司之类的地方,开得很热的暖气不觉得热吗?我觉得很热。
我设想在创建Web应用程序时,考虑到需要使用本地的NoSQL数据库,所以感觉有些犹豫不决。
前提 tí)
-
PHPがインストールしてあること(brew等で)
- PHPがインストールしてあること(brew等で)
-
- composerがインストールしてあること
-
- Laravelのプロジェクトが作成してあること
-
- Laravel始めたいならこの記事おすすめです
-
- https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d
- Laravelのインストールからの方はこの記事に沿ってLaravelのプロジェクトを作るところまでいくとスムーズですね
环境,只需要一个选项
-
Mac OS Mojave
- Mac OS Mojave
-
- PHP 7.3.11
-
- Laravel 6.5.0
- MongoDB 4.0.3
步骤
安装Mongo模块的PHP
pecl install mongodb
那个对方告诉你没有PECL的你如果你的PHP版本相当新的话,pecl会随之附带!
https://teratail.com/questions/126448
就像这篇teratail文章中所说的一样
试试这个命令吧:brew install php!
安装MongoDB驱动程序(查询生成器等)到Laravel应用
composer require jenssegers/mongodb
pecl install mongodb
那个对方告诉你没有PECL的你如果你的PHP版本相当新的话,pecl会随之附带!
https://teratail.com/questions/126448
就像这篇teratail文章中所说的一样
试试这个命令吧:brew install php!
安装MongoDB驱动程序(查询生成器等)到Laravel应用
composer require jenssegers/mongodb
composer require jenssegers/mongodb
这是GitHub链接:https://github.com/jenssegers/laravel-mongodb
我将引用以下这篇文章作为参考:
https://qiita.com/ekzemplaro/items/609fe7a5869a499b298d
3. 编辑 config/app.php
'providers' => [
// 略
Jenssegers\Mongodb\MongodbServiceProvider::class,
],
'aliases' => [
// 略
'Moloquent' => Jenssegers\Mongodb\Eloquent\Model::class,
],
4. 编辑.env文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
'providers' => [
// 略
Jenssegers\Mongodb\MongodbServiceProvider::class,
],
'aliases' => [
// 略
'Moloquent' => Jenssegers\Mongodb\Eloquent\Model::class,
],
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
删去
DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=city_db
5. 编辑 config/database.php
'default' => env('DB_CONNECTION', 'mongodb'),
// 略
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
],
6. 建立模型
php artisan make:model Models/Project
编辑Project.php文件如下。
<?php
namespace App\Models;
class Project extends \Moloquent
{
protected $collection = 'project';
}
$collection指的是MongoDB中的集合。MongoDB是一种文档型数据库,因此不像关系型数据库(如MySQL、PostgreSQL)那样具有表的结构。虽然我在这里没有提及,但如果你有兴趣的话可以自行调查。我认为MongoDB本身可能不再流行,但NoSQL这个概念将在未来扎根。
编辑7.routes/api.php
Route::group(['middleware' => ['api']], function(){
Route::resource('projects', 'Api\ProjectController');
Route::get('all', 'Api\ProjectController@all');
Route::get('find/{id}', 'Api\ProjectController@find');
Route::get('where/{name}', 'Api\ProjectController@where');
});
项目控制器将在此之后创建。
8. 创建控制器
php artisan make:controller Api/ProjectController
9. 编辑ProjectController.php这也是从文章中的参考资料来的。
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Project;
class ProjectController extends Controller
{
public function index()
{
$projects = Project::orderBy('_id', 'desc')->get();
return $projects;
}
public function all()
{
$projects = Project::all();
return $projects;
}
public function find($id)
{
$projects = Project::find($id);
return $projects;
}
public function where($name)
{
$projects = Project::where('name','=',$name)->get();
return $projects;
}
}
10. 确认 API 的操作。
php artisan serve --host 0.0.0.0
在一个终端窗口上启动服务器,并在另一个终端窗口上。
curl http://127.0.0.1:8001/api/project
常见问题(我遇到的)
找不到类’MongoDB\Driver\Manager’如果尝试使用8个命令制作控制器的话,
Class 'MongoDB\Driver\Manager' not found
这个出现过。
可能是artisan缓存的问题。即使在github上确认了,也找不到Driver/Manager。
顺便说一下,我认为通过编辑/etc/php.ini,不需要手动添加extension条目的话,很可能会自动添加这个方法。在我的情况下,
これはやってはダメ。おそらく非推奨の古いmongoDBのドライバーが来ると思います。
pecl install mongo
回答只要按照说明的步骤进行,似乎可以通过清除缓存来解决。
php artisan cache:clear
MongoDB\Driver\Exception\AuthenticationException 认证失败
如果使用数据库,肯定需要用户名和密码,所以在mongoDB中创建用户并将其添加到database.php文件中。
'username' => env('MONGO_USERNAME', ''),
'password' => env('MONGO_PASSWORD', ''),
如果您在.env文件中添加或更改变量,会发生错误。
只是按照本文进行操作。我认为应该正确执行用户身份验证。
我在GitHub的issue中找到了解决方法。
'default' => env('DB_CONNECTION', 'mongodb'),
// 略
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
],
php artisan make:model Models/Project

<?php
namespace App\Models;
class Project extends \Moloquent
{
protected $collection = 'project';
}
$collection指的是MongoDB中的集合。MongoDB是一种文档型数据库,因此不像关系型数据库(如MySQL、PostgreSQL)那样具有表的结构。虽然我在这里没有提及,但如果你有兴趣的话可以自行调查。我认为MongoDB本身可能不再流行,但NoSQL这个概念将在未来扎根。
编辑7.routes/api.php
Route::group(['middleware' => ['api']], function(){
Route::resource('projects', 'Api\ProjectController');
Route::get('all', 'Api\ProjectController@all');
Route::get('find/{id}', 'Api\ProjectController@find');
Route::get('where/{name}', 'Api\ProjectController@where');
});
Route::group(['middleware' => ['api']], function(){
Route::resource('projects', 'Api\ProjectController');
Route::get('all', 'Api\ProjectController@all');
Route::get('find/{id}', 'Api\ProjectController@find');
Route::get('where/{name}', 'Api\ProjectController@where');
});
项目控制器将在此之后创建。
8. 创建控制器
php artisan make:controller Api/ProjectController
9. 编辑ProjectController.php这也是从文章中的参考资料来的。
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Project;
class ProjectController extends Controller
{
public function index()
{
$projects = Project::orderBy('_id', 'desc')->get();
return $projects;
}
public function all()
{
$projects = Project::all();
return $projects;
}
public function find($id)
{
$projects = Project::find($id);
return $projects;
}
public function where($name)
{
$projects = Project::where('name','=',$name)->get();
return $projects;
}
}
10. 确认 API 的操作。
php artisan serve --host 0.0.0.0
php artisan make:controller Api/ProjectController
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Project;
class ProjectController extends Controller
{
public function index()
{
$projects = Project::orderBy('_id', 'desc')->get();
return $projects;
}
public function all()
{
$projects = Project::all();
return $projects;
}
public function find($id)
{
$projects = Project::find($id);
return $projects;
}
public function where($name)
{
$projects = Project::where('name','=',$name)->get();
return $projects;
}
}
10. 确认 API 的操作。
php artisan serve --host 0.0.0.0
php artisan serve --host 0.0.0.0
在一个终端窗口上启动服务器,并在另一个终端窗口上。
curl http://127.0.0.1:8001/api/project


常见问题(我遇到的)
找不到类’MongoDB\Driver\Manager’如果尝试使用8个命令制作控制器的话,
Class 'MongoDB\Driver\Manager' not found
Class 'MongoDB\Driver\Manager' not found
这个出现过。
可能是artisan缓存的问题。即使在github上确认了,也找不到Driver/Manager。
顺便说一下,我认为通过编辑/etc/php.ini,不需要手动添加extension条目的话,很可能会自动添加这个方法。在我的情况下,
これはやってはダメ。おそらく非推奨の古いmongoDBのドライバーが来ると思います。
pecl install mongo
回答只要按照说明的步骤进行,似乎可以通过清除缓存来解决。
php artisan cache:clear
MongoDB\Driver\Exception\AuthenticationException 认证失败
如果使用数据库,肯定需要用户名和密码,所以在mongoDB中创建用户并将其添加到database.php文件中。
'username' => env('MONGO_USERNAME', ''),
'password' => env('MONGO_PASSWORD', ''),
如果您在.env文件中添加或更改变量,会发生错误。
只是按照本文进行操作。我认为应该正确执行用户身份验证。
我在GitHub的issue中找到了解决方法。
php artisan cache:clear

'username' => env('MONGO_USERNAME', ''),
'password' => env('MONGO_PASSWORD', ''),
如果您在.env文件中添加或更改变量,会发生错误。
只是按照本文进行操作。我认为应该正确执行用户身份验证。
我在GitHub的issue中找到了解决方法。