メモ > 技術 > フレームワーク: Laravel6 > メモ
メモ
■引き続き
Laravel.txt の内容を再検証して移植する
最低限のモデル作成&操作をメモしておきたい
マイグレーションの列作成は「$table->bigInteger('user_id')->unsigned();」のように書けるかも。それならその方が直感的でいいかも
以下にusersとrolesを中間テーブルrole_userで紐付けてbelongsToManyで関係を定義する方法が紹介されている
参考にしてEntryとCategoryを多対多で紐付けてみたい
Eloquent:リレーション 6.x Laravel
https://readouble.com/laravel/6.x/ja/eloquent-relationships.html
現状Contractがあまり生かされていない?もしくは現状で十分?
一応、今サービスで呼び出しているのはリポジトリのContractではある
以下で紹介されている「クラスの差し替えを容易にする」「機能のドキュメントとして利用できるようにする」は実現できているとは思う
契約 6.x Laravel
https://readouble.com/laravel/6.x/ja/contracts.html
マイグレーションファイル内のクラス名が重複していても、マイグレーションの一括実行はできるか
今もできないなら、自分で新規にマイグレーションを作成した場合は
CreateAdminsTable20200408000000
のようにクラス名に日時を含めるか
マイグレーションの not null や unsigned の書き方を検討したい
マイグレーションでのコメント追加、単体テスト時にエラーになるか
ALTER TABLE の実行を「if (!app()->runningUnitTests()) { 〜 }」で囲う必要があるか
fallback_locale も最初に設定するか
と思ったが、以下で「ここは該当言語が見つからない場合の言語です。「en」がいいでしょう。」とあるので、デフォルトのままで良さそう
【Laravel5.6】インストール直後にやること3点 - console dot log
https://blog.capilano-fw.com/?p=289
Laravel管理画面「laravel-admin」を日本語化する。設定ファイルで対応
https://diy.hot-maker.com/454/
汎用的な検索用に getUsers メソッドがあるが、原則 getAdminUsers など専用にサービスのメソッドを設けるべきか
直接リポジトリを呼ぶという手もあるが、煩雑になるので常にサービス経由で呼ぶ方が良さそう
またそれなら、サービスに対してだけテストを書けば良くなる
記事管理を作る
ユーザの単一選択、カテゴリの複数選択、ファイルアップロード、プレビュー
などを検証したい
単体テストを書く
リポジトリクラスを差し替えてテストしたりも試したい
LaravelでCRUD - Qiita
https://qiita.com/apricotcomic/items/07f172a957c1f342fd91
【Laravel】DB登録値取得時のfind()、get()、first()の返り値早見表 - Qiita
https://qiita.com/sola-msr/items/fac931c72e1c46ae5f0f
デバッグ用の命令
【超入門】Laravelのデバッグ手法22選 - Qiita
https://qiita.com/ucan-lab/items/29614d0f3ded1d3a94fb
Laravelのdd() - Qiita
https://qiita.com/kyohei121877/items/ba596b57d6027cc21166
以下はLaravelに関する後発の記事。参考になるかも
Laravel 6 基本のタスクリスト - Qiita
https://qiita.com/ucan-lab/items/36f6e89abad26a68f69a
Laravel入門 - 使い方チュートリアル - - Qiita
https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d
Laravelでの開発でいつもやってることまとめ
https://zenn.dev/nrikiji/articles/d5b991402ea89c
マスター/スレーブのデータベースに対して、
「SELECTクエリ発行時はスレーブ」「それ以外はwriteマスター」
ができるらしい
Laravelでマスター/スレーブ構成のデータベースに接続するための設定 | I am a software engineer
https://imanengineer.net/laravel-how-to-configure-master-slave-db/
■更新する場合
SSHで接続して以下を実行
$ sudo su -s /bin/bash - nginx
$ cd /var/www/main
$ composer install
$ composer dump-autoload
$ php artisan migrate
$ php artisan db:seed
$ php artisan cache:clear
$ php artisan config:clear
$ php artisan route:clear
$ php artisan view:clear
クリア系のコマンドに関しては、以下だけで十分かもしれない
$ php artisan view:clear
■データベースに接続する場合
mysqlコマンドで接続してもいいが、以下で接続することもできる
$ php artisan db
■複雑なクエリ
※検証中
コントローラーに複雑なクエリは書かずに、
サービス経由でリポジトリを呼び出して、その中で具体的なクエリを定義するか
例えば、リポジトリで以下のように定義しておく
if (isset($conditions['payment_at'])) {
$query->leftJoin('user_campaigns', 'user_accounts.user_campaign_id', '=', 'user_campaigns.id');
$query->where(function($query) use ($conditions) {
$query->where(function($query) use ($conditions) {
$query->whereNull('user_campaign_id');
$query->where('registered_at', '<', $conditions['payment_at']);
});
$query->orWhere(function($query) use ($conditions) {
$query->whereNotNull('user_campaign_id');
$query->whereRaw('DATE_ADD(registered_at, INTERVAL user_campaigns.continuation MONTH) < ?', [$conditions['payment_at']]);
});
});
}
コントローラーから以下のように呼び出す
$users = $this->userAccountService->searchPaymentAccounts([
'payment_at' => '2021-10-01 16:55:00',
], [['user_accounts.id', 'asc']], null);
foreach ($users as $user) {
// 何かしらの処理
}
データベース:クエリビルダ 6.x Laravel
https://readouble.com/laravel/6.x/ja/queries.html