第27回 Laravelでデータベースの操作
公開日:2021-04-29 更新日:2021-04-30
1. 概要
Laravelでデータベースの操作をする方法について説明しています。
環境は前回と同じものを使います。
通常データベースの操作はSQLを使って行いますが、
Laravelでデータベースの操作を行う場合、
Eloquentと言うORM(ORM:Object-relational mapping)を使用します。
ORMは、オブジェクトとテーブルの関連付けをして、
SQLを使わずに、オブジェクトを操作して、データベースの操作を行います。
環境は前回と同じものを使います。
通常データベースの操作はSQLを使って行いますが、
Laravelでデータベースの操作を行う場合、
Eloquentと言うORM(ORM:Object-relational mapping)を使用します。
ORMは、オブジェクトとテーブルの関連付けをして、
SQLを使わずに、オブジェクトを操作して、データベースの操作を行います。
2. 動画
3. モデルの作成
php artisan make:model のモデル名
(例)
php artisan make:model Article
テーブル名は複数形にしますが、モデル名は単数形します。
コマンドを実行すると、app/Models 配下にモデルが作成されます。
4. 全データの取得
// データの取得
$articles = \App\Models\Article::all();
// 表示
foreach ($articles as $article) {
var_dump($article->id);
var_dump($article->title);
var_dump($article->body);
}
5. SQLの出力
DBの操作を行う前に次のコードを実行しておくと、
SQLが出力されるようになります。
app/Providers/AppServiceProvider.php の boot() に書いてください。
SQLが出力されるようになります。
DB::listen(function ($query) {
var_dump($query->sql);
});
アプリ全体で常にSQLを出力したい場合は、app/Providers/AppServiceProvider.php の boot() に書いてください。
6. 指定したIDのデータの取得
$article = \App\Models\Article::find(1);
7. データの更新
$article->title = 'abc';
$article->body = 'def';
$article->save();
8. データの削除
$article->delete();
9. データの追加
9. 1 モデルに設定可能なプロパティの指定
モデルに $fillable と言うプロパティを追加して、設定可能なプロパティを指定します。
protected $fillable = ['title', 'body'];
9.2. モデルの生成
コンストラクタに連想配列で初期値を指定します。
余分な値は、$fillable によってはじかれます。
$article = new \App\Models\Article([
'title' => 'title 1',
'body' => 'body 1',
'aaa' => 'aaa',
'bbb' => 'bbb',
]);
9.3. データの追加
データの更新と同じく save() を呼ぶだけです。
$article->save();
protected $fillable = ['title', 'body'];
コンストラクタに連想配列で初期値を指定します。
余分な値は、$fillable によってはじかれます。
余分な値は、$fillable によってはじかれます。
$article = new \App\Models\Article([
'title' => 'title 1',
'body' => 'body 1',
'aaa' => 'aaa',
'bbb' => 'bbb',
]);
9.3. データの追加
データの更新と同じく save() を呼ぶだけです。
$article->save();
$article->save();
10. 検索条件を指定してデータの取得
$article = \App\Models\Article::where('id', ">=", 1)->first();
$articles = \App\Models\Article::where('title', 'like', '%test%')->get();
$articles = \App\Models\Article::where('id', ">=", 1)->select(['title', 'body'])->orderBy('id', 'desc')->get();
where() や select() などの戻り値は、Illuminate\Database\Eloquent\Builder になるため、
データを取得する際には、
all() や find() の代わりに、get() や first() を使う必要があります。