【laravel】HasFactoryとは?vender|illuminateが無い

この記事では、laravel8以上でモデルを作ったときにデフォルトで記述されているHasFactoryとは?vender|illuminateが無いについてまとめました。
目次
HasFactoryとは
モデルファクトリはEloquentモデルの各フィールドに入る値を定義します。
モデルの工場といったところです。主にシーダーやテストコードからモデルファクトリーは呼び出されます。
https://qiita.com/ucan-lab/items/788d1a603f2b53ebb999
モデルを作ってみる
とりあえず、HasFactoryを見るためにモデルを作ってみます。
php artisan make:model ファイル名
作った直後、ファイルを見ると「HasFactory」と表記されていました。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Form extends Model { use HasFactory; }
Hasfactoryの場所
Hasfactoryのディレクトリは、
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model;
Illuminate\Database\Eloquent\Factories\HasFactory;
この階層にあるみたいです。
illuminateファイルの場所
illuminateファイルへアクセスするには、プロジェクトを作成したときに自動的に生成されるvenderファイルにあるようです。
vender > laravel > framework > src > Illuminate
venderファイルがない
laravelで、venderファイルが表示されないことがあります。色々調べたけど変更されたりしないように表示されないみたいです。
ただ、本番環境では
comporser install
を行い、appディレクトリに取得する必要がある
これらのファイルは、ルートディレクトリ直下の「vendor > laravel > framework > src > Illuminate配下」に保存されている。
このvendorディレクトリはgitに認識されないように、「.gitignore」ファイルに記載されている。
/node_modules /public/hot /public/storage /storage/*.key /vendor .env .env.backup .phpunit.result.cache docker-compose.override.yml Homestead.json Homestead.yaml npm-debug.log yarn-error.logVSCodeはデフォルトでは、.gitignoreや.ignoreファイルに含まれているディレクトリやファイルを検索結果に含まない設定になっている。検索にヒットしないのはこのため。
ちなみに、.gitignoreの記述ルールは、ディレクトリ名を記述した場合は、その配下もgitから除外する。
https://prograshi.com/framework/laravel/vscode-find-vendor-illuminate/
vendorフォルダの中のライブラリファイルは、編集できません。
https://biz.addisteria.com/laravel_vendor
- vendorディレクトリの中にはライブラリが入っている
- ローカル上でvendorディレクトリの中を編集しても、本番環境に反映されない
- そのため、オーバーライドを行う。大雑把にいうと、vendorの中の書きかえたい部分をappディレクトリの下にもってきて編集する。
- 本番環境では composer installコマンドを行って、ライブラリをインストールする
HasFactoryの中身について解説
HasFactoryの中身について解説します。
<!-- wp:codemirror-blocks/code-block {"mode":"php","mime":"text/x-php"} --> <div class="wp-block-codemirror-blocks-code-block code-block"><pre><?php namespace Illuminate\Database\Eloquent\Factories; trait HasFactory { /** * Get a new factory instance for the model. * * @param callable|array|int|null $count * @param callable|array $state * @return \Illuminate\Database\Eloquent\Factories\Factory<static> */ public static function factory($count = null, $state = []) { $factory = static::newFactory() ?: Factory::factoryForModel(get_called_class()); return $factory ->count(is_numeric($count) ? $count : null) ->state(is_callable($count) || is_array($count) ? $count : $state); } /** * Create a new factory instance for the model. * * @return \Illuminate\Database\Eloquent\Factories\Factory<static> */ protected static function newFactory() { // } } </pre></div> <!-- /wp:codemirror-blocks/code-block -->
- trait
①traitとは
traitとは、PHPのバージョン5.4.0から導入されたコードを再利用しやすくする機能です。
トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。 トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。 トレイトとクラスを組み合わせた構文は複雑さを軽減させてくれ、 多重継承や Mixin に関連するありがちな問題を回避することもできます。 https://www.php.net/manual/ja/language.oop5.traits.php
traitの使い方
traitの定義
trait トレイト名 { function メソッド名①() { 処理 } function メソッド名②() { 処理 } }
traitの利用
class クラス名 { use トレイト名; }
つまり、traitを利用するためモデルに
uae HasFactory;
があるわけです。
余談
公式マニュアルに出てくる
parent
が疑問に思われたらこちらを参照してください。簡単に説明すると、親クラスのプロパティへアクセスするためのキーワードです。
その他の参考
https://qiita.com/ucan-lab/items/788d1a603f2b53ebb999
https://ja.m.wikipedia.org/wiki/Factory_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3