model を使って mysql からデータを抽出します。
model の使い方がよくわからなくてちょっとハマってしまいました。
イメージ
steemit.com より頂きました。

.env の編集
mysql に接続するための設定をします。
nano .env
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=root
DB_PASSWORD=pass
命名規則
laravel には命名規則というものがあります。
慣れればコードが簡略化されるのでいいのでしょうが、慣れないとかえって面倒な感じがします。
データベースのテーブル名は必ず小文字から始まって複数形です。
model や controller にも規則があります。
テーブル名 | tests | 小文字で始まって複数形 |
model | Test | 大文字で始まって単数形 |
controller | TestController | モデル名 + Controller |
model の作成
まずは model を作成します。
php artisan make:model Test
以下のような model が作成されます。
app/Models/Test.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
use HasFactory;
}
そして、この model は変更する必要はありません。
ここがすごいところです。
これで tests テーブルと自動的に接続するようです。
controller の作成
次に controller を作成します。
php artisan make:controller TestController
以下のような controller が作成されます。
app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
//
}
これを以下のように書き換えます。
app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Test;// これを追加
class TestController extends Controller
{
public function index (Request $request)
{
$alldata = Test::all();
return view('select', compact('alldata'));
}
}
「use App\Models\Test;」を追加しないと Class not found になります。
ここがハマったところでした。
あとは直観的にわかりやすいと思います。
「$alldata = Test::all();」は多分 model を呼び出しているんだろうと思います。
デフォルトでは tests テーブル情報を取得しますが、これは model 内で変更可能なようです。
取得したデータをすべて select.blade.php に渡します。
select.blade.php
これは以前と同じにしました。
いろいろ継承したりできるようですが、それは後で取り組みます。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
@foreach ($alldata as $ev )
{{ $ev }}<br>
@endforeach
</body>
</html>
routing
最後に routing です。
routes/web.php
Route::get('/select', 'App\Http\Controllers\TestController@index');
アドレスバーに「127.0.0.1:8000/select」と入力。