「Laravel」について学習を始めたプログラミング初心者である私が、
ゆっくりではありますが、その学習記録をブログ記事として残させて頂いております。
同じような境遇の方の参考になったり、また「Laravel」を含めたプログラミング言語を学ぶきっかけになったりすれば良いなと思っております。
*WindowsとMacで多少処理が異なる部分があるかもしれません・・・。
本記事はWindowsを想定。Macの方で詰まったら、ググって調べてみてください。
(ローカル環境は開発済みとする。テキストエディタはVSCodeを用いる)
前置きが長くなりましたが、それでは下記からの本文をどうぞ!
注意!前回記事と同様にtinkerの説明部分まで
正「create_tests_table」(複数形)
→ 誤「create_test_table」(単数形)
と誤っております。
コードや本文は訂正しておりますが、画像は更新できていないのでご容赦ください。
(画像においてはtest→testsと脳内変換して頂ければ幸いです。)
実際にマイグレーションファイルを操作して、データベースにアクセスする
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tests');
}
};
前回に続いてマイグレーションのまとめです。
実際にコードを記述して、データベースを操作してみます。
public function up(): void
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
upメソッドだけ抜き出してみました。
現在は「tests」と言うテーブルの中に、「id」と「timestamps *1」と言うカラムが存在している状態、と思ってください。
*1 なお「timestamps();」の操作は、「created_at」(作成日時)、「updated_at」(更新日時)の2つのカラムを作成します。
ここに新しく「text」と言う名前のカラムを作り、そのカラムには文字列が入るとしましょう。
下記のように記述します。
public function up(): void
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->string('text');
$table->timestamps();
});
}
カラム名を(’ ’)の中に記載し、そのカラムには文字列を入れたいので、string(‘ ’)としています。
こんな感じで、PHP言語でデータベースを操作することが簡単にできます。($table->string(‘text’);)
ただし、まだマイグレーションファイルにコードを記述した段階では、データベースには何も反映されていません。
どのようにデータベースへ反映させるかと言うと、下記のコマンドをターミナルに打ち込みます。
php artisan migrate
マイグレーションファイルを作成するときは「migration」と言う単語を打ち込みましたので、混同しないようにしましょう。
実際にターミナルに打ち込んでみます。
php artisan migrate
と入力しましたら、WARNと表示されました。
これは自分みたいに≪初回≫でマイグレーションした際に起こるエラーメッセージだと思うのですが、
私はデータベースとして、XAMPP(windows)をインストールした際に付随するMYSQL(Maria DB)を使用しているのですが、 *2
英語が駄目駄目な自分がメッセージを訳すとMYSQLに「Laravel」と言うフォルダが見当たりませんよ!みたいな事を言ってます。
見当たらないのでWARNしており、その次の行で「作りますか?(はい/いいえ)」と言ってます。
*2 この辺の知識疎いので間違った事が書いてあれば、どなたか訂正して欲しいです
YES とコマンドを叩いて、無事に新規テーブルが作られたの+php artisan migrateを実行できました。
実際にMYSQL側を確認して見ましょう。
もちろんApacheとMySQLは立ち上げている状態で、Adminボタンをクリック
↓の画像のようにphpMyAdminが開きます。
左側に「laravel」というフォルダが新規で作られ、その中に「tests」テーブルも確認できました。
testsテーブルの中身も先ほど、追加した「text」カラム含めて反映されております。
コマンドを用いたデータベース操作(tinker)
上記ではイミグレーションファイルのupメソッド内に記述して、
php artisan migrate と言うコマンドをターミナルに叩くことで、データベースを操作(反映)しました。
次は【tinker】と言うシステムを用いて、ターミナルからデータベースを操作する方法をまとめます。
よく見るAIチャットみたいな感じで、データベースを操作することが出来まして、≪対話型≫とも言われるみたいです。
見るより慣れろだと思うので、実際にtinkerを用いてデータベースを操作してみます。
まずターミナルに下記のコマンドを書きます。
php artisan tinker
画像の様なメッセージが返ってくれば、上手くtinkerが起動しています。
さて実際にコマンドを叩きながら、tinkerでデータベースを操作してみますよ。
$test = new App\Models\Test;
new を用いてインスタンス化するのですが、どこのクラスをインスタンス化すると言うと、
モデルの説明記事の時に作成したモデルファイルの「Test.php」をインスタンス化します。
場所はApp,Modelsフォルダの中にありましたので、上記のように記述します。
なおインスタンスは変数「test」に入れておきます。($test = new~)
コマンドを叩くと、すぐにメッセージが返ってきます。
この辺りが対話型と言われるゆえんだと思います。
> $test = new App\Models\Test;
= App\Models\Test {#6310}
> $test->text = "first";
$testから「->」で各プロパティにアクセスすることが出来ます。
ここで言うプロパティは「id」「created_at」「updated_at」、そしてイミグレーションで追加した「test」カラムであり、
-> カラム名(プロパティ名) = 文字列など;
と入力することで、各カラムにデータを格納することが出来ます。
“first”と言う文字列をtextカラムに格納しました。(string:文字列)
続けて以下のコマンドも打ち込んでみます。
・->save(); :ここまでの変更点をセーブ
・::all(); :全件を表示
また「first」と同じようにコマンド入力して、「second」のデータを格納してみます。
$test = new App\Models\Test;
= AppModels\Test {#6310}
$test->text = "first";
= "first"
$test->save();
= true
App\Models\Test::all();
= Illuminate\Database\Eloquent\Collection {#7328
all: [
App\Models\Test {#7330
id: 1,
text: "first",
created_at: "2024-01-06 08:57:39",
updated_at: "2024-01-06 08:57:39",
},
],
}
$test2 = new App\Models\Test;
= App\Models\Test {#7331}
$test2->text = "second";
= "second"
$test2->save();
= true
App\Models\Test::all();
= Illuminate\Database\Eloquent\Collection {#7332
all: [
App\Models\Test {#7333
id: 1,
text: "first",
created_at: "2024-01-06 08:57:39",
updated_at: "2024-01-06 08:57:39",
},
App\Models\Test {#7334
id: 2,
text: "second",
created_at: "2024-01-06 09:39:35",
updated_at: "2024-01-06 09:39:35",
},
],
}
ターミナル上、↑のようになっていれば上手くいっております。
太字部分がコマンドに対して返ってきている行です。
save();に対しては「true」が返ってきており、保存が成功していることを意味しております。
::all();に対してはtinkerでいれた各データが返ってきています。
このようにターミナルでコマンドを叩いてあげる事で簡単にデータベース操作が可能になります。
> exit
tinkerを終了したい場合は上記コマンドを入力すると、終わらせることが出来ます。
突然のエラーメッセージ
save();のコマンドを入力する段階で画像のエラーが出て、間違いに気づきました。
Illuminate\Database\QueryException SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.tests’ doesn’t exist
このエラーについては別記事でまとめたいと思います。
きっと初心者あるあるのエラーだと思いますので。
(だから私が引っかかる笑)
まとめ
2回にわたりイミグレーションのまとめをしました。
ここまでで、基本的なMVCモデルの記述、ファイルの説明が終わりましたので、
次回はモデル、ビュー、コントローラーをそれぞれ繋いで、データベースとビューを紐づけたいと思います。
それでは!
コメント