LoginSignup
1
3

Laravel: MariaDB の CRUD API を作成

Last updated at Posted at 2018-06-14

前提

MariaDB に次のデータを用意します。

User: scott
Password: tiger123
データベース: aritcle

接続の確認

mysql -uscott -ptiger123 article

作成

  1. プロジェクトの作成
  2. laravel new mariadb_test
    
  3. .env の修正
  4. .env
    (省略)
    DB_DATABASE=article
    DB_USERNAME=scott
    DB_PASSWORD=tiger123
    (省略)
    
  5. ルーティングの設定
  6. routes/api.php
    <?php
    
    use Illuminate\Http\Request;
    
    Route::group(['middleware' => ['api']], function(){
      Route::resource('articles', 'App\Http\Controllers\Api\ArticlesController', ['except' => ['create', 
    'edit']]);
    });
    
  7. コントローラーの作成
  8. php artisan make:controller Api\\ArticlesController --resource
    
  9. ルーティングの確認
  10. >エラーが出ないことを確認
    php artisan route:list
    
    $ php artisan route:list
    
      GET|HEAD        / .......................................................... 
      POST            _ignition/execute-solution ignition.executeSolution › Spati…
      GET|HEAD        _ignition/health-check ignition.healthCheck › Spatie\Larave…
      POST            _ignition/update-config ignition.updateConfig › Spatie\Lara…
      GET|HEAD        api/articles . articles.index › Api\ArticlesController@index
      POST            api/articles . articles.store › Api\ArticlesController@store
      GET|HEAD        api/articles/{article} articles.show › Api\ArticlesControll…
      PUT|PATCH       api/articles/{article} articles.update › Api\ArticlesContro…
      DELETE          api/articles/{article} articles.destroy › Api\ArticlesContr…
      GET|HEAD        api/user ................................................... 
      GET|HEAD        sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum  …
    
                                                               Showing [11] routes
    
  11. モデルの作成
  12. php artisan make:model Article -m
    

    -m をつけることで、database/migrations/2024_01_05_053005_create_articles_table.php が作成されました。

  13. マイグレーションファイルを編集
  14. 2行追加
    database/migrations/2024_01_05_053005_create_articles_table.php
    省略
        public function up(): void
        {
            Schema::create('articles', function (Blueprint $table) {
                    $table->id();
                    $table->string('title');  // 追加
                    $table->text('body');  // 追加
                    $table->timestamps();
            });
    
    省略
    
  15. マイグレーションファイルの内容をデータベースに反映
  16. php artisan migrate
    

    MariaDB は次のようになります。

    MariaDB [article]> show tables;
    +------------------------+
    | Tables_in_article      |
    +------------------------+
    | articles               |
    | failed_jobs            |
    | migrations             |
    | password_reset_tokens  |
    | personal_access_tokens |
    | users                  |
    +------------------------+
    6 rows in set (0.000 sec)
    
    MariaDB [article]> 
    
  17. コントローラーの修正
  18. app/Http/Controllers/Api/ArticlesController.php
    <?php
    
    namespace App\Http\Controllers\Api;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use App\Models\Article;      // 追加
    
    省略
    
  19. コントローラーのアクションの修正
  20. create と edit の処理は削除

    app/Http/Controllers/Api/ArticlesController.php
    // 略
        public function index()
        {
            //
            $articles = Article::all();
            return $articles;
        }
    // 略
        public function store(Request $request)
        {
            $article = new Article;
            $article->title = $request->title;
            $article->body = $request->body;
            $article->save();
            return redirect('api/articles');
        }
    // 略
        public function show($id)
        {
            $article = Article::find($id);
            return $article;
        }
    // 略
        public function update(Request $request, $id)
        {
            $article = Article::find($id);
            $article->title = $request->title;
            $article->body = $request->body;
            $article->save();
            return redirect("api/articles/".$id);
        }
    // 略
        public function destroy($id)
        {
            $article = Article::find($id);
            $article->delete();
            return redirect('api/articles');
        }
    
  21. API の動作を確認
  22. サーバーを起動

    php artisan serve
    
    1. 一覧の取得
    2. curl http://localhost:8000/api/articles | jq .
      
    3. 特定の要素を取得
    4. curl http://localhost:8000/api/articles/11 | jq .
      
    5. データの挿入
    6. curl -H 'Content-Type: application/json' \
      	http://localhost:8000/api/articles -d '{"title": "ppp","body": "テスト"}'
      
    7. データの更新
    8. curl -X PUT -H 'Content-Type: application/json' \
          http://localhost:8000/api/articles/12 -d '{"title": "ttt","body": "Test Message"}'
      
    9. データの削除
    10. curl -X DELETE http://localhost:8000/api/articles/11
      

MariaDB へテストデータの投入

次のような SQL で入れます。

insert into articles set id=10, title="aaa", body="こんにちは";
insert into articles set id=11, title="bbb", body="おはよう";
insert into articles set id=12, title="ccc", body="今晩は";

MariaDB の状態

MariaDB [article]> select * from articles;
+----+-------+-----------------+------------+------------+
| id | title | body            | created_at | updated_at |
+----+-------+-----------------+------------+------------+
| 10 | aaa   | こんにちは      | NULL       | NULL       |
| 11 | bbb   | おはよう        | NULL       | NULL       |
| 12 | ccc   | 今晩は          | NULL       | NULL       |
+----+-------+-----------------+------------+------------+
3 rows in set (0.001 sec)

MariaDB [article]>

確認したバージョン

$ php --version
PHP 8.2.10-2ubuntu1 (cli) (built: Sep  5 2023 14:37:47) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.10-2ubuntu1, Copyright (c), by Zend Technologies

$ php artisan --version
Laravel Framework 10.39.0
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3