前提
MariaDB に次のデータを用意します。
User: scott
Password: tiger123
データベース: aritcle
接続の確認
mysql -uscott -ptiger123 article
作成
- プロジェクトの作成
- .env の修正
- ルーティングの設定
- コントローラーの作成
- ルーティングの確認 >エラーが出ないことを確認
- モデルの作成
- マイグレーションファイルを編集 2行追加
- マイグレーションファイルの内容をデータベースに反映
- コントローラーの修正
- コントローラーのアクションの修正
- API の動作を確認
- 一覧の取得
- 特定の要素を取得
- データの挿入
- データの更新
- データの削除
laravel new mariadb_test
.env
(省略)
DB_DATABASE=article
DB_USERNAME=scott
DB_PASSWORD=tiger123
(省略)
routes/api.php
<?php
use Illuminate\Http\Request;
Route::group(['middleware' => ['api']], function(){
Route::resource('articles', 'App\Http\Controllers\Api\ArticlesController', ['except' => ['create',
'edit']]);
});
php artisan make:controller Api\\ArticlesController --resource
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
php artisan make:model Article -m
-m をつけることで、database/migrations/2024_01_05_053005_create_articles_table.php が作成されました。
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();
});
(省略)
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]>
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; // 追加
(省略)
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');
}
サーバーを起動
php artisan serve
curl http://localhost:8000/api/articles | jq .
curl http://localhost:8000/api/articles/11 | jq .
curl -H 'Content-Type: application/json' \
http://localhost:8000/api/articles -d '{"title": "ppp","body": "テスト"}'
curl -X PUT -H 'Content-Type: application/json' \
http://localhost:8000/api/articles/12 -d '{"title": "ttt","body": "Test Message"}'
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