20210508のlaravelに関する記事は4件です。

laravel-adminでDashboardにbladeを表示する

備忘録。 app/Admin/Controllers/HomeController.php return $content ->title('Dashboard') - ->description('Description...') - ->row(Dashboard::title()) - ->row(function (Row $row) { - - $row->column(4, function (Column $column) { - $column->append(Dashboard::environment()); - }); - - $row->column(4, function (Column $column) { - $column->append(Dashboard::extensions()); - }); - - $row->column(4, function (Column $column) { - $column->append(Dashboard::dependencies()); - }); - }); + ->view('welcome');
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelからDiscordにエラー通知を飛ばしたい

SlackよりもDiscordのほうがレスポンスが早いオタクです。 運用しているLaravelベースのサービスで万が一500番台のエラーが発生したとき、エラー情報をDiscordに飛ばしてほしい、そういうことありますよね。あるんですよ。 調べたところやるだけでしたので書いておきます。 事前準備 DiscordへのWebhookの設定は公式のドキュメントも参照されてください。 DiscordのWebhookでもっと戯れたい方はこちらの記事も参考になります。 LaravelはSlack宛にログを飛ばせる LaravelはデフォでSlackに通知を飛ばす機構があります。( https://readouble.com/laravel/8.x/ja/notifications.html ) config/logging.php に設定がありますね 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => env('LOG_LEVEL', 'critical'), ], .env にSlackのwebhookURLを書いておけば、すでにSlackに通知が飛ばせるよう準備されています。助かりますね! でも今回エラー情報を飛ばしてほしいのはDiscordです。ではどうするか。 DiscordはSlack形式のWebhookをサポートしている DiscordにGitHubのWebhookを登録している方は /webhooks/{webhook.id}/{webhook.token}/github のようにURL末尾に /github をつけることで通知を受け取れるようになるのをご存知かもしれません。 実はSlack互換も用意されています。 POST /webhooks/{webhook.id}/{webhook.token}/slack あとは実装するだけ app/Exceptions/Handler.php にちょっと書き加えます public function render($request, Throwable $e) { $response = parent::render($request, $e); if (($response->getStatusCode() / 100) === 5 and !config('app.debug')){ $message = 'サーバエラーが発生しました'.PHP_EOL.$e->getMessage().PHP_EOL.$request->fullUrl(); Log::channel('slack')->error($message); } return $response; } parent::render() が普通にレスポンスをくれるので、そのデータをちょっとお借りしてログを出します。 ついでに !config(app.debug) を条件式に入れてデバッグモードのときは飛ばないようにしておきました。 テスト 絶対バグるコードをちょっと書き加えて試します。F5リロードする緊張の一瞬。 \ ピポッ / ヨシ!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】join, group by, count(*)したいとき

やりたいこと ・グループごとの集計人数を出したい ・SQLはかけるがLaravelのクエリビルダの使い方がわからない Laravelでなかなかうまくいかなかったので学びを記事にしました。 テーブル構造 例えば以下のようなテーブルがある時 ↓(親)groupsテーブル # name 1 group1 2 group2 3 group3 4 group4 5 group5 6 group6 ↓(子)usersテーブル # name group_id 1 user1 1 2 user2 1 3 user3 2 4 user4 2 5 user5 3 6 user6 4 SQL文 「group」ごとに何人の「user」が所属しているかを集計したいとき。 素のSQL文では以下のようになります。 select g.id, g.name, count(u.group_id) from groups g left outer join users u on g.id = u.group_id group by u.group_id; クエリビルダ Laravelで表すと以下になります。 $groups = DB::table('groups') //$groupsは変数にいれてるだけ ->leftJoin('users', 'groups.id', '=', 'users.group_id') ->select('groups.id', 'groups.name', DB::raw("count(users.group_id) as count")) ->groupBy('groups.id') ->get(); ・外部結合は leftjoin()(内部結合してしまうと誰も所属してないグループが無視される) ・グループ化はgroupBy() ・集計関数は素のSQL文で書く必要あるためDB::raw()を使います (私は集計関数に時間かかりました) groupByがうまく動かない問題 私の場合は以下のようなエラーが出ました。 SQLSTATE[42000]: Syntax error or access violation: 1055 '(アプリ名.groups.name' isn't in GROUP BY これが書き方なのか何のエラーかわからず解決に時間かかってしましました。 実は Laravelのバージョンによってはうまく動作しません。 ちなみに私はLaravel8です。 結論いうと config/database.phpの “strict”モードをfalseにすることでエラーが表示されなくなります。 config/database.php 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel-blog'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false,//←この部分をtrueからfalseへ 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], これでうまく表示されるようになります!! MySQLのセキュリティみたいなものがデフォルトで厳しく?なってるみたいで グループ化による重複するレコードが問題みたい・・・です(^_^;) この問題を最初に解決した人スゴイ(*_*) 結果 先ほどの$groupをforeachで取り出すと groups.id groups.name count 1 group1 2 2 group2 2 3 group3 1 4 group4 1 5 group5 0 6 group6 0 こんな感じになります (^-^) これでビューへ渡す変数が一つで済むし表示が簡単になります!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel Apacheのルートディレクトリにソースをcloneしたときにすること 個人メモ

すること mysqlのユーザを作成 .envファイルの作成と記載、.envの権限を770に設定する。 下記コマンドを実行する。 $ sudo chmod 770 /var/www/クローンしたディレクトリ $ sudo chmod 770 storage -R $ sudo chmod 770 bootstrap/cache -R $ composer install $ php artisan key:generate $ php artisan config:cache $ php artisan migrate $ sudo chown -R apache:apache /var/www/クローンしたディレクトリ名 apacheにオーナー変更した後にcomposer updateとinstallが実行できなくなるので一旦cloneした時のユーザにオーナーを戻してからcomposer updateやinstallを実行する。 apacheのドキュメントルートの設定を変更する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む