0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

備忘録 ーーlaravelにおけるデータベースとルーティングの理解ーー

Last updated at Posted at 2025-05-25

p●izaで学んだことの備忘録。インデントとか滅茶苦茶だけど許して

1.laravelの導入

 laravel new (プロジェクト名)

5分くらいでできます。

laravelをinstallしましたら、始めに'hello world'と表示させていきましょう。記述させるにはフロントのファイルを弄ればいいですね。
laravelではresouress/views/....にフロントが記述してますのでそこのファイルを弄ればよいです。

さて、laravelはバックエンドで動かす言語です。バックエンドで動かすのなら、SQLに接続できないとだめですね。
そこで.envファイルにある

    DB_DATABASE=mybbs 
    DB_USERNAME=root

以上の2点を変更してください。(環境に応じる)

laravel はMVCモデルと呼ぶ処理を実装しています。流れとして下記の図のように、ユーザーからのリクエストを受け、ルーティングで処理先を決定し、コントローラーで処理、モデルでデータベース操作を行い、ビューで表示する...といった流れです。よくわかりませんね、これからじっくりと説明しますね。

laravel-image.png

2.モデルの作製

上記で解説したmvc..要するに役割ごとに分かれており、それぞれの役割ごとに記述する場所が異なるってことですね。ならそのたびにファイルを作製するって??(そんな面倒なことはし)ないです。実はコマンド一つでできます。ターミナルで

 php artisan make:model Article(モデルの名前) -m -c -r 

 これがダメなら

  php ./artisan make:model Article(モデルの名前) -m -c -r 

とします。今回は便宜上モデルの名前を'Article'としておきます。この際、単数形が望ましいです。上手にできたら

    model create sculley

と出ます。では確認がてらのぞいてみましょう

bbs/app/model/Articleでは

<?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Article extends Model
    {
    
    }

bbs/app/Html/Controller/ArticleControllerでは
(略)
更にbbs/database/migrete/以下を覗くと
bbs/database/migrete/xxxxxxxが作製されてます(xxxxxxは日付)
この日付けのやつがデータベースへ反映させるやつです。肝心ですね。
さて、このXXXXのファイルを見てみましょう。関数が沢山ありますね。うちの一つを見ると

public function up()
 {
     Schema::create('articles', function (Blueprint $table) {
         $table->id();
         $table->timestamps();
     });
 }

Schema::create...以下を見ると名前が自動で反映されてます。はぇーーすっごく便利。ではここでカラムを挿入しましょう

 public function up()
{
     Schema::create('articles', function (Blueprint $table) {
         $table->id('id');
         $table->string('content');  ※型に注意。
         $table->timestamps();
     });
 }

はい。書いただけです。これでは反映されません。コマンドを打ちましょう。

php artisan migrate  

これをしないと反映されません。

ではcontentカラムを挿入したので、データを入れていきましょう
同じくbbs/database/migrete/xxxxxxx...内にある public function up()関数内で

{
DB::table('articles')->insert([
    ['content' => 'リンゴ'],
    ['content' => 'バナナ'],
    ['content' => 'オレンジ']
]);

と記述しましょう。データが挿入されてるはずです。挿入しましたらデータの更新です。

 php artisan migrate

これでよかったですね。

3.ルーティングの作製

先ほどはモデルを作製しました。ですが表を見てください。中心部にあるコントローラーが色々がんばってますね。でもその前にルーティングがいます。
WEBページを思い出してほしいのですが、ページやアドレスごとに処理が異なりますよね?ルーティング君はリクエストを受け取り、その処理を誰に、どこにするのかを司ります。
ではルーティングの設定に参りましょう。

routes/web.phpを確認してください

Route::get('/', function () {
    return view('welcome');
});

とあるはずです。
ここのファイルに更に

Route::get('/articles', 'ArticleController@index')->name('article.list');

と記入します。
ここの->name('article.list')..はアプリケーションの中で参照するときの名前です。name()...で名前を付けたのですね。名前を付ける事でページの偏移が楽になります。
phpのformのactrionなんかにこの名前を入力するとそこに飛べます。いいですね
また初期設定として、Laravelのアプリケーション内で全てのURLをHTTPSに強制させたいので

app/Providers/AppServiceProviderのfunction Boot() に

 public function boot()
 {
     URL::forceSchema('https');
 }

とします。これで良しです。

ここでundefined type 'URL'. laravel と出るなら 

use Illuminate\Support\Facades\URL;

と追加してください。収まります

4.コントローラーとビューの作成

コントローラーはHTTPリクエストを受け取りそのアクションを行います。ページの偏移やデータベース関連などです。大忙しです。
ビューはフロント領域です

では手始めにページの偏移から行きましょう。
app/Http/Controller/ArticleContolloerより

public function index()
 {
     return view('index');
 }

はい。これでviewのindexを返すようになりました。
では//bbs/resources/viewsより、index.blade.php を作製しましょう。index.blade.php..に

<a>hello</a>

と記入して
localhost:XXXX/articles

とすれば'hello'と出ます。ここでなんで'localhost:XXXX/articles' とお思いの方もいますが、routes/web.phpの Route::get('/articles', ...@index.. で制定
してますね。で、/ArticleContolloer...でindexを実行するとview('index');と返すとなってます。ここら辺は実感しにくいですが解るとなるほどーーとなりますので根気よく頑張りましょう。
さて、ページが偏移するだけではつまらないですね。せっかくですから欲しいですよね、データベースのデータ。欲しいですね。引数からのデータ

では手始めに、routes/web.phpに

Route::get('/articles/{id}', 'ArticleController@show')->name('article.show');

と記載しましょう。これでarticles/{id}とする事でIDを受け取れます。
そして、app/Http/Controller/ArticleContolloerに

     public function show()
 {
     $message = 'Welcome to my BBS';
     $articles = Article::all();‘<--小  大
     return view('index', ['message' => $message, 'articles' => $articles]);
 }

と記載し、//bbs/resources/viewsより、

 <!DOCTYPE html>
 <html>
     <head>
         <meta charset='utf-8'>
         <title>paiza bbs</title>
         <style>body {padding: 10px;}</style>
     </head>
     <body>
         <h1>paiza bbs</h1>
         <p>{{ $message }}</p>
         @foreach ($articles as $article)
             <p>{{ $article->content }}</p>
         @endforeach
     </body>
 </html>

これでOKです。ではlocalhost:xxxxx:/article/1と。。

Failed to connect server. Error: connect ECONNREFUSED 

あれー?おかしいね(秀)?

あっ・・・そっかぁ...起動コマンドを忘れてました

php artisan serve 

はい。これで無事にデータが取り出せます

捕捉

route/web.phpに

    Route::get('/', function () {
        return return('welcome');
    });

がありましたね?ここのViewはMVCモデルのviewを返すことになってます。ではviewではなくredirectにするとどうでしょうか?

    Route::get('/', function () {
        return redirect('welcome');
    });

すると/indexに偏移します。直接的で便利ですね。

  • ビューを直接返す (view('welcome')) → その場で welcome.blade.php を表示
  • リダイレクトする (redirect('welcome')) → /welcome に移動して別ルートとして処理

※laravel 8以降のルーティングの書き方が変わります

Route::get('/articles', 'ArticleController@index')->name('article.list');

Route::get('/articles', [ArticleController::class, 'index'])->name('article.list');
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?