Laravel에서 mongoDB의 API를 만들었으므로 막힌 곳을 써 둡니다.

안녕하세요. 최근 갑자기 추워졌습니다.
아침은 30분만! 와 난방 붙여 버립니다. 하지만 역시, 통근, 통학하고 걷는 운동을 해 가는 것으로, 도착한 회사등에서 난방 건간이라고 덥지 않습니까? 나는 뜨겁다.

이번에는 웹 앱을 만들 때 온프레의 NoSQL을 요구한 가정으로 모지모지해 보았습니다.

전제


  • PHP가 설치되어있는 것 (brew 등에서)
  • composer가 설치되었습니다
  • Laravel 프로젝트가 작성되었음
    Laravel 시작하고 싶다면이 기사 추천입니다.
    htps : // 이 m/사의 1202/이고 ms/6021856b70에 4f8d3dc3d
    Laravel을 설치 한 사람들은이 기사를 따라 Laravel 프로젝트를 만드는 데 도움이되는 것이 원활합니다.

    환경


  • Mac OS Mojave
  • PHP 7.3.11
  • Laravel 6.5.0
  • MongoDB 4.0.3

  • 절차



    1. PHP 용 mongo 모듈 설치


    pecl install mongodb
    

    pecl이 없다고 말한 거기 당신



    pecl은 PHP가 적당히 최신이라면 부속되어 옵니다!
    htps : // 놀라운 l. 코m/쿠에 s치온 s/126448
    이 teratail 기사처럼
    brew install php
    해보자!

    2. Laravel 용 mongoDB 드라이버 (쿼리 빌더 등) 설치


    composer require jenssegers/mongodb
    

    github은 여기 : htps : // 기주 b. 코 m / 지 센세게 rs / 라라

    여기에서이 기사를 참고 인용합니다.
    htps : // 코 m / 에 k 제 mp ぁ로 / 있어 ms / 609 77 5869 499b298d

    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
    

    그런 다음 Models 디렉토리 아래에 Project.php가 있습니다.


    Project.php는 다음과 같이 편집합니다.

    Models/Project.php
    <?php
    
    namespace App\Models;
    
    
    class Project extends \Moloquent
    {
        protected $collection = 'project';
    }
    

    $collection은 mongoDB의 컬렉션을 의미합니다. mongoDB는 문서형 데이터베이스이므로, RDB(관계형 데이터베이스 like MySQL, PostgreSQL)와 같이 테이블이 되지 않습니다. 여기서는 언급하지 않지만 관심이 있다면 알아보십시오. mongoDB 자체는 하지 않고도 NoSQL이라는 개념은 앞으로도 뿌리 내려갈 것이라고 생각합니다.

    7.routes/api.php 편집



    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');
    
    });
    

    ProjectController는 이 후에 만듭니다.

    8. 컨트롤러 작성


    php artisan make:controller Api/ProjectController
    

    9. ProjectController.php 편집



    이것도 기사로부터의 참고입니다.

    app/Http/Controllers/Api/CityController.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
    

    어쨌든 등록 한 사람이 돌아옵니다.


    URL에 넣으면 get 리퀘스트 날렸을 때의 처리가 되어, 돌아온다
    (원래 웹 페이지 열람은 GET 요구? 그래서)


    FAQ 자주 있어? (내가 만났다)



    Class 'MongoDB\Driver\Manager' not found



    8의 명령으로 컨트롤러를 만들려고하면,
    Class 'MongoDB\Driver\Manager' not found
    

    했다.
    아마 artisan 현금 문제. github 확인해도 Driver/Manager는 없다.
    덧붙여서/etc/php.ini의 편집으로 extension 기술하지 않아도 아마 이 방법이라면 자동 기술해 준다고 생각합니다. 제 경우에는
    これはやってはダメ。おそらく非推奨の古いmongoDBのドライバーが来ると思います。
    pecl install mongo
    

    Answer



    설명한 단계를 밟아도 캐시를 지우면 해결 될 것입니다.
    php artisan cache:clear
    

    MongoDB\Driver\Exception\AuthenticationException Authentication failed





    이것은 DB를 사용한다면 사용자 이름과 암호가 필요하다고 말하고 mongoDB로 사용자를 만들고 database.php에
    'username' => env('MONGO_USERNAME', ''),
    'password' => env('MONGO_PASSWORD', ''),
    

    .env에 변수를 추가하면 오류가 발생합니다.
    어디까지나 이 기사를 따라 하면 됩니다. 본래 제대로 유저 auth 는 확실히 해야 한다고 생각합니다 아마
    해결책은 github issue에서 찾아냈습니다
    htps : // 기주 b. 코 m / 지 센세게 rs / ぁらゔぇ l-몽고 db / 이스에 s / 766

    좋은 웹페이지 즐겨찾기