20211031のlaravelに関する記事は7件です。

Laravel 入門 withErrorsの使い方

はじめに withErrorsで処理失敗時のエラーメッセージを出力する例をいくつか挙げています。 withErrorsはエラーが発生したら、セッションにエラーメッセージをフラッシュデータとして保存し、エラー表示をさせる事ができます。 目次 例外処理のエラーハンドリング CRUD処理失敗時 バリデーション失敗時 例外処理のエラーハンドリング public function store(Request $request) { DB::beginTransaction(); try { // 何らかのDB登録処理 DB::commit(); } catch (\Exception $e) { DB::rollback(); return redirect()->back()->withErrors('エラーが発生しました'); } return view('index'); } CRUD処理失敗時 public function destroy(Post $post) { return $post->delete() ? redirect()->action([PostController::class, 'index'])->with('flash_message', '投稿の削除が成功しました。') : redirect()->action([PostController::class, 'index'])->withErrors('投稿の削除に失敗しました。'); } バリデーション失敗時 public function post(Request $request) { $validator = $this->post_validator($request->all()); if ($validator->fails()) {                          // バリデーション失敗時 return redirect('index') ->withErrors($validator) ->withInput(); } else { // バリデーション通過後の処理 } } protected function post_validator(array $data) { return Validator::make($data, [ 'content' => ['required'] ]); }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel データの登録・更新

はじめに データの登録や更新に用いる各メソッドを記載しています。主に違いが分かるように記載しています。 入門〜初級向けにシンプルに書いてますので、実際に業務で使用する際は若干書き方が違うと思います。 詳しい説明は別の記事を参照して下さい。 目次 save update create associate attach / detach save インスタンスを作成して、データを挿入後、save( )で保存する。 $user = new User(); $user->name = $request->name; $user->save(); update saveとほぼ同じですが、違いは以下の通りです。 save( ) nameカラムの内容を更新する際に、挿入されるデータが更新前と同じものであれば、updated_atのカラムが更新されない。 update( ) nameカラムの内容を更新する際に必ずupdated_atのカラムが更新される。 $user = new User(); $user->name = $request->name; $user->update(); create こちらはインスタンス化からデータ保存を一括で実行できます。 $user = App\Model\User::create(['name' => $request->name]); associate そのユーザーに紐ずく、postsテーブルのuser_idカラムを更新する。一対多のリレーションで使用する。 ※この場合、Postモデル内にあるbelongsToの第二引数であるuser_idを更新する。 // $userの部分は、レコードではなく、user_id(idの数字)を入れるだけでもいけると思います・・・たぶん $user = User::find(1); $post->user()->associate($user)->save(); // Post.phpファイル public function user() { return $this->belongsTo('App\Models\User', 'user_id'); } attachとdetach attach( ) 中間テーブルに一括で登録できる。 この場合は「ユーザー」に紐ずく「複数の趣味」を一括でDBに保存出来る。 $user->hobbies()->attach($request->hobbies); detach( ) 中間テーブルを一括で削除できる。 引数を指定しない場合は、その「ユーザー」に紐ずく「全ての趣味」が中間テーブルから削除される。 $user->hobbies()->detach(); ※中間テーブルの更新は他sync( )やupdateExistingPivot等がありますが、ここでは説明を割愛します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel 更新処理の違い(save, update, create, associate, attach, detach)

はじめに データの登録や更新に用いる各メソッドを記載しています。主に違いが分かるように記載しています。 シンプルに書いてますので、実際に業務で使用する際は若干書き方が違うと思います。 詳しい説明は別の記事を参照して下さい。 目次 save update create associate attach / detach save インスタンスを作成して、データを挿入後、save( )で保存する。 $user = new User(); $user->name = $request->name; $user->save(); update saveとほぼ同じですが、違いは以下の通りです。 save( ) nameカラムの内容を更新する際に、挿入されるデータが更新前と同じものであれば、updated_atのカラムが更新されない。 update( ) nameカラムの内容を更新する際に必ずupdated_atのカラムが更新される。 $user = new User(); $user->name = $request->name; $user->update(); create こちらはインスタンス化からデータ保存を一括で実行できます。 $user = App\Model\User::create(['name' => $request->name]); associate そのユーザーに紐ずく、postsテーブルのuser_idカラムを更新する。一対多のリレーションで使用する。 ※この場合、Postモデル内にあるbelongsToの第二引数であるuser_idを更新する。 // $userの部分は、レコードではなく、user_id(idの数字)を入れるだけでもいけると思います・・・たぶん $user = User::find(1); $post->user()->associate($user)->save(); // Post.phpファイル public function user() { return $this->belongsTo('App\Models\User', 'user_id'); } attachとdetach attach( ) 中間テーブルに一括で登録できる。 この場合は「ユーザー」に紐ずく「複数の趣味」を一括でDBに保存出来る。 $user->hobbies()->attach($request->hobbies); detach( ) 中間テーブルを一括で削除できる。 引数を指定しない場合は、その「ユーザー」に紐ずく「全ての趣味」が中間テーブルから削除される。 $user->hobbies()->detach(); ※中間テーブルの更新は他sync( )やupdateExistingPivot等がありますが、ここでは説明を割愛します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 mac + laradockのapache2とMySQLエラー回避(おまけXdebug3設定)

M1 macでのlaradockの問題点 仕事でlaravelを使用しており、ローカル開発環境としてlaradockをIntel macで使用していましたが、最近M1 macに移行したところ、laradockでいくつか問題点があったので回避策を調べました。 問題1 apache2が起動しない まず、M1ではapache2のコンテナが起動しません。 方法 /apache2/Dockerfileを修正 // 1行目を修正 FROM --platform=linux/x86_64 webdevops/apache:ubuntu-18.04 // 最後の行に下記を追加 RUN wget -O "/usr/local/bin/go-replace" "https://github.com/webdevops/goreplace/releases/download/1.1.2/gr-arm64-linux" \ && chmod +x "/usr/local/bin/go-replace" \ && "/usr/local/bin/go-replace" --version ちなみにnginxはM1でも普通に動きます 問題2 MySQLが起動しない 同様にMySQLも起動しません。 ネットで調べるといろいろ情報がありますが、自分の場合は下記の変更だけで起動しました。 方法 /mysql/Dockerfileを修正 // 2行目を修正 FROM --platform=linux/x86_64 mysql:${MYSQL_VERSION} これで起動しない場合は、.envのDATA_PATH_HOSTで指定しているディレクトリを削除してください。 おまけ Xdebug3の設定 PHPのバージョンによっては(PHP8.0など)Xdebugのバージョン3がインストールされますが、設定のパラメータ名がバージョン2から変わっており、うまくPhpStormでステップ実行ができませんでした。 方法 /php-fpm/xdebug.iniと/workspace/xdebug.iniの最後の行に下記を追加 xdebug.client_host="host.docker.internal" xdebug.discover_client_host=0 xdebug.client_port=9000 xdebug.mode=debug xdebug.start_with_request=yes xdebug.output_dir="~/xdebug/phpstorm/tmp/profiling" .envのWORKSPACE_INSTALL_XDEBUGとPHP_FPM_INSTALL_XDEBUGをtrueに変更してください。 PhpStormでステップ実行すると、ポート周りのワーニングが出ますが、一応ステップ実行はできます。 おまけ2 環境構築のコマンド一覧 コンテナビルド LAMPとredis、phpmyadmin、redis-webuiを構築 docker-compose build --no-cache apache2 php-fpm mysql workspace redis phpmyadmin redis-webui コンテナ起動 docker-compose up -d apache2 mysql workspace redis phpmyadmin redis-webui サーバーの中からlaravelのコマンドやマイグレーションをしたい時 docker-compose exec workspace bash サーバーにsshで入ったような時のような感じで操作できます。 コンテナ停止 docker-compose stop コンテナ削除 docker-compose down phpmyadminへのアクセス(デフォルト設定) localhost:8081 サーバー:mysql ユーザー:root パスワード:root redis-webuiへのアクセス(デフォルト設定) localhost:9987 認証ID:laradock 認証PW:laradock コンテナ再構築 エラーやPHPバージョン変更などでコンテナを再構築するときは、自分は下記のように一旦コンテナを削除してから再構築してます。 もっと簡略化できる場合もあります。 docker-compose down docker-compose build --no-cache apache2 php-fpm mysql workspace redis phpmyadmin redis-webui docker-compose up -d apache2 mysql workspace redis phpmyadmin redis-webui うまくいかない時 上記でも書きましたが、うまくいかない時は.envのDATA_PATH_HOSTで指定しているディレクトリを一旦削除してから、buildすると直る場合があります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel Tinkerの使い方

はじめに LaravelでクエリビルダやEloquentを用いて、実際にデータの取得ができるか確かめたい時に便利です。 コマンドにその処理を書く事で、実際にどういったデータが取得できるか確認できます。 目次 tinkerを起動する 試したい処理を書く 上記の処理で取得したデータを表示 tinkerを終了する Tinkerを起動する tinkerを使用するには下記コマンドを入力 $ php artisan tinker 試したい処理を書く ユーザーidが1であるユーザーの情報が取得できるか確かめたい。 User::where('id', 1)->get(); 上記の処理で取得したデータを表示 => Illuminate\Database\Eloquent\Collection {#4753 all: [ App\Models\User {#4741 id: 1, name: "山田 太郎", email: "test@exampe.co.jp", created_at: "2021-10-23 16:59:02", updated_at: "2021-10-23 16:59:02", deleted_at: null, }, ], } Tinkerを終了する q を入力してEnterでTinkerを閉じる。 >>> q
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel Tinkerの使い方(入門)

はじめに LaravelでクエリビルダやEloquentを用いて、実際にどのようなデータの取得ができるか、素早く確かめたい時に便利です。 コマンドにその処理を書く事で、実際にどういったデータが取得できるか確認できます。 目次 Tinkerを使用する 試したい処理を書く 上記の処理で取得したデータを表示 Tinkerを終了する Tinkerを使用する tinkerを使用するには下記コマンドを入力 $ php artisan tinker 試したい処理を書く ユーザーidが1であるユーザーの情報が取得できるか確かめたい。 User::where('id', 1)->get(); 上記の処理で取得したデータを表示 => Illuminate\Database\Eloquent\Collection {#4753 all: [ App\Models\User {#4741 id: 1, name: "山田 太郎", email: "test@exampe.co.jp", created_at: "2021-10-23 16:59:02", updated_at: "2021-10-23 16:59:02", deleted_at: null, }, ], } Tinkerを終了する q を入力してEnterでTinkerを閉じる。 >>> q
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのテストでAssertSeeが通ったり通らなかったりした【備忘録】

クォーテーションが入ってるダミーデータが生成されると通らない Laravel 6でファクトリーを使って生成した文字列データをAssertSeeでテストすると通ったり通らなかったり。 確認したところクォーテーションが入ってるダミーのみ通っていないっぽい。 ファクトリー $factory->define(Sample::class, function (Faker $faker) { return [ 'name' => $faker->realText(10), ] テスト $response->assertSee($Sample->name); ヘルパーファンクションをつかって特殊文字のエスケープ テストをこうする $response->assertSee(e($Sample->name)); e()で特殊文字をエスケープしてテストすることができる 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む