ORM(以下Eloquent)をライブラリとして導入する方法を書きました。blog.zuckey17.orgこの記事の中ではじめ、次のようなコードを書いてbooksテーブルについてBookクラスを作り全件を取得して表示しました。$book['name'];}このコードは動いてはいましたが、2点の指摘をいただきました。toArrayするのはやめましょうtable、fillableフィールドの指定はいりません。非常にはずかしいことに、普段Laravelを書いて、Eloquentを使っているというのに知らないことがありすぎたので、本エントリではこれらの指摘とその他に調べた基本的だと思われることをまとめておきます。GitHubにありますので、確認に使ってみてください。->表示するのは、以下のようにして書けます。$book->name;}Eloquentは、all、getのメソッドを利用するとCollectionクラスという便利なリストのインスタンスを戻してくれます。例のようにforeachで回すと、単一のModelが取得できますし、Modelであれば、->でフィールドにアクセスできます。toArray()を使うとそれらの恩恵に預かることができないので、ORMを使う旨味が激減します。取得には、他にfindやfirst、lastなどのメソッドがあります。それぞれプライマリキーで検索やlimitを書けているのですが、これらは単一のModelを取得することに利用します。findの引数が配列になっている場合は、Collectionが戻ります。table、fillableフィールドの指定はいりません。1つのModelインスタンスは1テーブルの1レコードと完全に一致します。そのため、テーブルの名前が複数形のスネークケースという慣例に則っていれば、EloquentはbooksをBookモデルに紐付けるといったように、テーブルの指定を推測してくれます。この他にも、connectionというフィールドも良く明示的に書いていましたが、DBが複数あるなどの特殊な場合を覗いてはDefaultの設定を見るため、指定する必要はありません。fillableフィールドfillableフィールドは悪意のあるユーザーがアプリが意図しない変更をDBに与えないように変更可能かどうかをカラム名のホワイトリストで縛るものです。以下のようにfillableフィールドに指定した名前のカラムには、fill値を指定してレコードを作成することが可能です。指定されていたとしても、その値は無視されます。流',]);$newBook->save();同様の役割にguardedというフィールドが存在します。こちらは、fillableとは逆でブラックリストです。変更されたくない値を明示的に指定することができます。createdをfillすることができない];その他の基本事項ここから先は、指摘を受けてからその他に調べて、使ってはいたもののしっかりと理解していなかったり、知らなかったものなどについて紹介します。ChunkとCursor公式ドキュメントの以下の項目に記載のあったchunkメソッドとcursorメソッドですが、どちらも大量のデータを取得する際にメモリ使用量を抑える際に使うメソッドのようです。カーソルによって1クエリで1行ずつデータを舐めることによりメモリ使用量を少なくするこちらについては、僕自信の理解が曖昧なため、もう少し調べる必要があると思います。詳しく理解されている方がいらしたら、コメントで参考サイトなど教えていただきたいです。"\n";}上記どちらも、結果として全件の本のタイトルが表示されます。Scopeクエリスコープはallやgetメソッドを発行する際に、結果を絞り込むのに便利な機能です。Scopeはその定義をそれぞれのModelのbootメソッド内にてaddGlobalScopeにて宣言すれば、すべてのクエリにて絞込みが利用できます。Book::withoutGlobalScope(BookScope::class)->get();とすると、絞込みを回避することもできます。Scopeこちらは、Scopeクラスを作らなくても、以下のようにbootメソッド内で絞込み条件を付け足すこともできます。Scopeは各Modelに定義します。scopeというプレフィックスをつけてpublicなメソッドとして宣言し、クエリを引数に取って、決まった絞込みを利用できます。Scope同様各Modelに定義します。Scopeの定義に引数を増やして、絞り込む値を利用時に入れることができます。まとめ前回のブログについて指摘していただいた実装を見直し、調査しましたブログを書くことで改善できてよかったです!その他にもEloquentの知らなかった基本的な機能がたくさんあったので、まとめて、自分で書いてみましたまだ基本の「き」なのでこれからも少しずつ調べていこうと思います次回はCollectionの様々な使い方、Eventあたりをやりたいです。2023年下半期振り返りプロダクトマネジメントにも通ずる経営学の名著「ストーリーとしての競争戦略」を読んだ検索はてなブログをはじめよう!zuckey_17さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。