我在Laravel中创建了一个MongoDB的API,在此记录一下我遇到的问题

你好。最近天气突然变冷了,是吧?
早上我只会开30分钟的暖气!但是因为我要步行去上班、上学,所以到了公司之类的地方,开得很热的暖气不觉得热吗?我觉得很热。

我设想在创建Web应用程序时,考虑到需要使用本地的NoSQL数据库,所以感觉有些犹豫不决。

前提 tí)

    • PHPがインストールしてあること(brew等で)

 

    • composerがインストールしてあること

 

    • Laravelのプロジェクトが作成してあること

 

    • Laravel始めたいならこの記事おすすめです

 

    • https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d

 

    Laravelのインストールからの方はこの記事に沿ってLaravelのプロジェクトを作るところまでいくとスムーズですね

环境,只需要一个选项

    • 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

这是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

删去

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
image.png编辑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
image.png

image.png

常见问题(我遇到的)

找不到类’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 认证失败

image.png如果使用数据库,肯定需要用户名和密码,所以在mongoDB中创建用户并将其添加到database.php文件中。

'username' => env('MONGO_USERNAME', ''),
'password' => env('MONGO_PASSWORD', ''),

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

bannerAds