コントローラーで、データベースのデータを取得したいのに上手く取得できないため、そもそもの部分の理解のために備忘録を書きます。
前提
- Todoアプリを作っております。
- TodoController.phpのindexアクションが実行された時に、DBのtodosテーブルから全データを引っ張ってこれるようにしたい。
現状
コントローラ
todo-api/app/Http/Controllers/TodoController.php
<?php
namespace App\Http\Controllers;
use App\Models\Todo;
use Illuminate\Http\Request;
class TodoController extends Controller
{
public function index()
{
$todoIndex = Todo::all();
return $todoIndex;
var_dump($todoIndex);
}
}
モデル
todo-api/app/Models/Todo.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Todo extends Model
{
use HasFactory;
}
マイグレーションファイル
todo-api/database/migrations/●●●●●●●●●●●●_create_todos_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('memo')->nullable();
$table->smallInteger('status')->default(0);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('todos');
}
};
DBのテーブルの状態
ルーティング
todo-api/
Route::controller(TodoController::class)->group(function () {
Route::get('todo/index', [TodoController::class, 'index']);
});
ブラウザの画面
localhost:8000/todo/index にアクセスしてみると・・・
なぜだろう。。。
あれ?これってもしかして、データベースにそもそもデータ追加していないから、空っぽだから[]が表示されている・・・?
Migrationでテーブルとカラムは作ったけど中身は作っていないし・・・
SQLでDB操作
中身チェック
SELECT * FROM todos
データ挿入
insert into todos values (1, '洗濯', 0);
中身チェック
SELECT * FROM todos
データを追加できました!
ブラウザで再度確認してみると・・・
しっかり返ってきました!
やはり、DBにデータがないだけでした(^^;)