- 投稿日:2020-08-11T21:43:00+09:00
【Eloquent】よく使うメソッド集
Eloquentは便利ですよね。どんなメソッドがあるかまとめたくなったので、ここに書いちゃおうと思います。
*使用環境
PHP 7.4.5
Laravel 7.22.4基本的な使い方
まずはモデルクラスを用意します。Itemクラスならば以下のようなコマンドで作れます。
php artisan make:model Item
後はそのモデルクラスを使って、あとで出る表にあるメソッドでどんどんデータ抽出するだけです。こんな感じで->でくっつけていきます。<?php use Item; //この一文を書き忘れるとエラーになってしまう。 $result = Item::where('value', 1000)->limit(10)->get();集計系(selectで使うような)
メソッド名 引数 説明 max 1.カラム名 max('value')とすればselect max(value)ということになります。 結合系(joinを使うような)
メソッド名 引数 説明 join 1.テーブル名 2.主となるテーブルの結合カラム 3.演算子(=など) 4.従となるテーブルの結合カラム join('type', 'item.item_type', '=', 'type.id')とすれば、inner join type on item.item_type = type.idということになります。 抽出系(whereで使うような)
メソッド名 引数 説明 where 1.カラム名 2.完全一致させるもの where('id', 'solabito331')とすればwhere id='solabito331'という抽出のしかたになります。 where 1.カラム名 2.演算子(=など) 3.比較対象 where('id', '>', 10)とすればwhere id>10 という抽出のしかたになります。 whereNotNull 1.カラム名 whereNotNull('age')とすれば、where age is not nullという抽出のしかたになります。 limit 1.件数 limit(10)とすれば、10件に絞られます。
- 投稿日:2020-08-11T21:16:16+09:00
独学未経験エンジニアがweb系自社開発企業でアルバイトを2ヶ月してみて感じたこと
簡単な自己紹介
- 大学では機械工学を専攻
- プログラマに魅力を感じ2019年新卒でメーカー子会社のIT会社に入社
- 入社してから10ヶ月で会社を退職
- そこから4ヶ月間独学で勉強し、現在web系の自社開発企業でアルバイト中
ニートになって独学していた時代
新卒で入社したときに感じたことや退職理由はまた今度別の記事で書いてみたいと思います。
勉強したこと一覧
progate(HTML,CSS,Javascript,Ruby,RubyonRails)
railsチュートリアル解説動画
2周はした。1周目は動画を見るだけで、2周目は手を動かしながらでした。
かなりお世話になり、railsチュートリアルとは友達になった気がするRuby on Rails5 超入門
amazonリンク
読んだのは3割ぐらいだけRuby on Rails5 速習実践ガイド
amazonリンク
辞書的な感じで使ったりした。暇なときに読んでみてもためになることが多い。Gitが、おもしろいほどわかる基本の使い方33
amazonリンク
gitの操作の基礎を学んだ。すぐに読み終わる内容なので、読みやすいキタミ式イラストIT塾 基本情報技術者
amazonリンク
コンピュターの基礎を理解するのにはちょーど良かった。時間をかけてちょっとずつ読んだwebを支える技術
amazonリンク
何を書いているのか全然分からなかった。kindle版で技術書は読みにくい。図解即戦力 AWSのしくみと技術がしっかりわかる教科書
amazonリンク
AWSのサービスの概要は大体理解したけど、実装まではできずプログラミングスクール受講(ポテパンキャンプ)
ポテパンのリンク
gitの操作、N+1問題、Rspecの書き方はここで自主的に学んだEveryday Rails - RSpecによるRailsテスト入門 購入リンク
ちょくちょく参考にできた。これも詰まったときに検索する用。ポートフォリオ作成
当時はAWS,Docker, CI/CD, Kubernetes等についてはほぼほぼ理解できずに、断念していました。
開発環境なんかはrailsチュートリアルで使っていたcloud9を使っていました。
まずはHerokuに自分が一生懸命作成したアプリケーションをデプロイし、公開できるようにしました。
一応独自ドメイン,SSL化程度は行っておき、Herokuは有料プランを使用し、少しでも応答速度が早くなるようにしておきました。
一応当時のポートフォリオのソースコードのリンクを貼っておきます。
https://github.com/ak2-lucky/clothes-app
ファッションが好きだった僕は洋服のレビューサイトを作りました。この記事を見ている駆け出しエンジニアの日々勉強されている方々はこう思っているかもしれません。
AWSにデプロイすらできないのに、webエンジニアになれるの?
Dockerで開発環境も構築できないの?
自動テストぐらいはやっといたら?現役のwebエンジニアも同じことを思うでしょう。
ポートフォリオも作りきれないような奴はエンジニアになる資格なんかないよって。
なぜならポートフォリオだけは運にも左右されない自分の努力だけで100パーセント作りきれる成果物だからです。確かにそうです。
僕の努力不足です。何の異論もありません。
認めます。そして就職活動をはじめます。
就職活動時代
結果からゆうとほぼ全落ち。
面接までいったのは1.2回でした。
面談してくれた会社で研究開発で人材を募集しているからそこに来ないか?と言ってくれた企業もありました。(結局いかず)
コロナの影響とかいう言い訳はしません。
全て自分の実力不足。
アルバイトも採用している企業に応募し,1社だけ何とかアルバイトとして採用していただきました。今回で自分の市場価値を知りました。
大学は何も考えずに過ごし、新卒で入社した会社を何の成果も残さず10ヶ月で退職。
世間はそんな奴のことを評価はしてくれません。
もちろん当然の評価です。アルバイトとしてweb系自社開発企業で働く(今)
技術スタック:AWS,Docker,Laravel+vue.js
働いてみるまでLaravelはおろかPHPも触ったことありませんでした。vue.jsもですが。
詳細は省きますが、実際に働いてみて感じるのは、プログラムを書く以外のことです。
技術のキャッチアップ云々の話ではなくて、組織作り、開発の体制やフローなどの重要さについてです。
自分はプログラミングが苦ではありません。
しかし、プログラミング業務以外の部分でストップすることが多い場合があります。(例えば、なぜこの変更を加えられたのかというコメントがないandコードを見ても分からない)
連携がうまく取れなくて、個々の意思で変更が加えられたりするので、デザインがバラバラ。
issue作成者等に確認もしないで変更を進められていたり。
CI/CDもそのうちの一つですが、issueを作成するのは誰なのか、誰の判断を最終的に仰ぐのか、UIのデザインは好きに決めていいのか、プルリクではどこを見ればいいのか、など他にもいろいろありますが。。。会社によって開発の進め方などは違うと思うので、一概にあれが悪い、これが悪いというわけではありませんが、開発体制や組織作りはサービス開発にかなり大きく影響するように感じました。
開発言語や技術以前にこういった根本的な開発の導線を確保する重要性を学びました。
最後に
ここまで読んでいただいた方には、いろいろ思うことがあると思います。
2ヶ月しか働いていない、しかもアルバイト如きが何を偉そうなこと言ってるんだ!
とか思ってる方いるかもしれません。ですが、これは個人の一意見であります。
ただ同じように駆け出しエンジニアの方の参考になればいいなと思って書きました。webエンジニアへの道は高く険しいように感じます。
しかし、自分にとって登りたい山がどれだけ高かろうが、険しかろうが、関係ありません。
ただ登るだけ
毎日頑張って積み上げて、疲れたら一緒にサボりましょう。長くなりましたが、初投稿は以上になります。
ここまで読んでいただきありがとうございました。
- 投稿日:2020-08-11T19:37:55+09:00
LaravelのUnitテストでRefreshDatabaseを使ったらSAVEPOINT trans2 does not exist が出た話
現象
Laravelを利用した環境で通常のケースではTransactionも機能しており問題なかったが、RefreshDatabaseを用いたPHPUnitでの実行ではエラーが発生していた。
Doctrine\DBAL\Driver\PDOException : SQLSTATE[42000]: Syntax error or access violation: 1305 SAVEPOINT trans2 does not exist /src/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43 /src/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:260 /src/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:238 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php:90 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:233 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:149 Caused by PDOException: SQLSTATE[42000]: Syntax error or access violation: 1305 SAVEPOINT trans2 does not exist /src/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:41 /src/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:260 /src/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:238 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php:90 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:233 /src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:149環境
全てdockerコンテナ内
- mysql: 5.7
- Laravel: 6.18.34
- PHPUnit: 9.3.0
先に結論
- 今回の場合はテストの中(正確にはseeder)でテーブルに対してtruncateを発行していたのが問題になっていた。
- これはMySQLの仕様によるもので暗黙的なコミットが発生してしまうため。
調査方法
- MySQLのクエリログを有効にする
[mysqld] general_log=ON general_log_file=general_query.log
- テストを実行する
/var/lib/mysql/general_query.log
を確認- QueryとExecuteだけ抜き出し
今回はこの時点でSTART TRANSACTION後にテーブルのtruncateを行っていた事に気づけたが一応MySQLコンソールにクエリ流し込んでエラーになることを確認したりもした。
あとがき
LaravelのRefreshDatabaseでRollback出来ない、Transactionがおかしいみたいな内容はググると結構出てくるが、結局きちんと解決しているものが少ないように思えたので残してみることにした。
はじめはLaravel側でクエリログを出力していたが、SAVEPOINT周りなんかは
TransactionRolledBack
、TransactionCommitted
、TransactionBeginning
で追いきれなかったのでMySQL側でログ出力したほうが確実だったなと後から反省。
- 投稿日:2020-08-11T19:26:09+09:00
VSCode Remote-Containers で Laravel7 開発環境 ( CentOS8+PHP7.4+MongoDB4.4 ) を爆速で準備する
はじめに
Docker で開発環境コンテナをサクッと準備。実際の開発は VSCode + Remote-Containers ( 拡張機能 ) を使ってコンテナ内で行うための手順をまとめています。記事内容に間違いなどありましたら、コメント欄にてご指摘お願いいたします。
まだ色々と制約はありますが、とりあえずコンテナを立ち上げるところまでは上手くいったので公開します。前提条件
- Docker ( Windows/MacOS の方は Docker Desktop ) が使用できること
- VSCode が使用できること
ファイル構成
以下の構成でディレクトリとファイルを作成していきます。
とりあえず動かしてみたい方は GitHub から Clone してください。Project/ ├─ .devcontainer/ │ ├─ devcontainer.json │ └─ Dockerfile └─ mongodb-org.repo手順.1 : VSCode に Remote-Containers ( 拡張機能 ) をインストール
VSCode に Remote-Containers という拡張機能をインストールしてください。
手順.2 : devcontainer.json 作成
.devcontainer/devcontainer.json{ "name": "test", "context": "..", "dockerFile": "Dockerfile", "settings": { "terminal.integrated.shell.linux": null, "workbench.startupEditor": "newUntitledFile", "editor.minimap.enabled": true, "vsicons.dontShowNewVersionMessage": true, "explorer.confirmDelete": false, "files.autoSave": "afterDelay" }, "appPort": [ 8000, 27017 ], "remoteUser": "vscode", "workspaceFolder": "/var/www/html", "extensions": [ "alefragnani.bookmarks", "mikestead.dotenv", "mhutchie.git-graph", "eamodio.gitlens", "onecentlin.laravel-blade", "austenc.laravel-blade-spacer", "onecentlin.laravel5-snippets", "cjhowe7.laravel-blade", "felixfbecker.php-pack", "vscode-icons-team.vscode-icons" ] }手順.3 : Dockerfile 作成
.devcontainer/DockerfileFROM centos:8 LABEL maintainer="slangsoft" LABEL version="1.0" LABEL description="Laravel sample project for trying out the VS Code Remote - Containers extension." ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=$USER_UID ARG PATH_LARAVEL=/var/www/html # Basic settings RUN set -x \ && dnf -y upgrade \ && dnf -y install sudo dnf-utils wget git \ && groupadd --gid $USER_GID $USERNAME \ && useradd --shell /bin/bash --uid $USER_UID --gid $USER_GID --create-home $USERNAME \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME # Install nginx RUN dnf -y install nginx # Install php RUN set -x \ && dnf module reset php \ && dnf -y install epel-release glibc-locale-source glibc-langpack-en \ && dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm \ && dnf -y module install php:remi-7.4 # Install Laravel EXPOSE 8000 RUN set -x \ && dnf -y install php-mcrypt php-pdo php-bcmath php-tokenizer php-xml php-mysqlnd php-gd php-intl php-zip php-opcache php-pecl-xdebug \ && wget https://getcomposer.org/installer -O composer-installer.php \ && php composer-installer.php --filename=composer --install-dir=/usr/local/bin \ && composer self-update \ && composer create-project laravel/laravel $PATH_LARAVEL --prefer-dist \ && groupadd laravel \ && gpasswd -a $USERNAME laravel \ && gpasswd -a nginx laravel \ && find $PATH_LARAVEL -type d -exec chmod 775 \{\} \; \ && find $PATH_LARAVEL -type f -exec chmod 664 \{\} \; \ && chown -R :$USERNAME $PATH_LARAVEL \ && find $PATH_LARAVEL -type d -exec chmod g+s \{\} \; \ && setfacl -R -d -m g::rwx $PATH_LARAVEL # Install MongoDB EXPOSE 27017 COPY ./mongodb-org.repo /etc/yum.repos.d/ RUN dnf -y install mongodb-org # Set locale RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG="ja_JP.UTF-8" ENV LANGUAGE="ja_JP:ja" ENV LC_ALL="ja_JP.UTF-8" # Working directory setting WORKDIR $PATH_LARAVEL手順.4 : mongodb-org.repo 作成
mongodb-org.repo[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc手順.5 : コンテナ起動
コマンドパレットを開いて [remote-containers: Open Folder in Container...] を実行するとコンテナのビルドが始まります。無事にビルドが完了すると、コンテナ内で VSCode が起動します。
参考リンク
- VS CodeでDocker開発コンテナを便利に使おう
- CentOS8にLaravel7をインストールする
- CentOS8にMongoDBをインストールする手順
- Dockerfile リファレンス
- 【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の"開発コンテナ"始めよう
改訂履歴
- 2020/08/11
初版公開 ( ほとんど説明も無い叩き台記事 )
- 投稿日:2020-08-11T19:26:09+09:00
VSCode Remote-Containers で Laravel7 開発環境 ( Centos8+PHP7.4+MongoDB4.4 ) を爆速で準備する
はじめに
Docker で開発環境コンテナをサクッと準備。実際の開発は VSCode + Remote-Containers ( 拡張機能 ) を使ってコンテナ内で行うための手順をまとめています。記事内容に間違いなどありましたら、コメント欄にてご指摘お願いいたします。
まだ色々と制約はありますが、とりあえずコンテナを立ち上げるところまでは上手くいったので公開します。前提条件
- Docker ( Windows/MacOS の方は Docker Desktop ) が使用できること
- VSCode が使用できること
ファイル構成
以下の構成でディレクトリとファイルを作成していきます。
とりあえず動かしてみたい方は GitHub から Clone してください。Project/ ├─ .devcontainer/ │ ├─ devcontainer.json │ └─ Dockerfile └─ mongodb-org.repo手順.1 : VSCode に Remote-Containers ( 拡張機能 ) をインストール
VSCode に Remote-Containers という拡張機能をインストールしてください。
手順.2 : devcontainer.json 作成
.devcontainer/devcontainer.json{ "name": "test", "context": "..", "dockerFile": "Dockerfile", "settings": { "terminal.integrated.shell.linux": null, "workbench.startupEditor": "newUntitledFile", "editor.minimap.enabled": true, "vsicons.dontShowNewVersionMessage": true, "explorer.confirmDelete": false, "files.autoSave": "afterDelay" }, "appPort": [ 8000, 27017 ], "remoteUser": "vscode", "workspaceFolder": "/var/www/html", "extensions": [ "alefragnani.bookmarks", "mikestead.dotenv", "mhutchie.git-graph", "eamodio.gitlens", "onecentlin.laravel-blade", "austenc.laravel-blade-spacer", "onecentlin.laravel5-snippets", "cjhowe7.laravel-blade", "felixfbecker.php-pack", "vscode-icons-team.vscode-icons" ] }手順.3 : Dockerfile 作成
.devcontainer/DockerfileFROM centos:8 LABEL maintainer="slangsoft" LABEL version="1.0" LABEL description="Laravel sample project for trying out the VS Code Remote - Containers extension." ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=$USER_UID ARG PATH_LARAVEL=/var/www/html # Basic settings RUN set -x \ && dnf -y upgrade \ && dnf -y install sudo dnf-utils wget git \ && groupadd --gid $USER_GID $USERNAME \ && useradd --shell /bin/bash --uid $USER_UID --gid $USER_GID --create-home $USERNAME \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME # Install nginx RUN dnf -y install nginx # Install php RUN set -x \ && dnf module reset php \ && dnf -y install epel-release glibc-locale-source glibc-langpack-en \ && dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm \ && dnf -y module install php:remi-7.4 # Install Laravel EXPOSE 8000 RUN set -x \ && dnf -y install php-mcrypt php-pdo php-bcmath php-tokenizer php-xml php-mysqlnd php-gd php-intl php-zip php-opcache php-pecl-xdebug \ && wget https://getcomposer.org/installer -O composer-installer.php \ && php composer-installer.php --filename=composer --install-dir=/usr/local/bin \ && composer self-update \ && composer create-project laravel/laravel $PATH_LARAVEL --prefer-dist \ && groupadd laravel \ && gpasswd -a $USERNAME laravel \ && gpasswd -a nginx laravel \ && find $PATH_LARAVEL -type d -exec chmod 775 \{\} \; \ && find $PATH_LARAVEL -type f -exec chmod 664 \{\} \; \ && chown -R :$USERNAME $PATH_LARAVEL \ && find $PATH_LARAVEL -type d -exec chmod g+s \{\} \; \ && setfacl -R -d -m g::rwx $PATH_LARAVEL # Install MongoDB EXPOSE 27017 COPY ./mongodb-org.repo /etc/yum.repos.d/ RUN dnf -y install mongodb-org # Set locale RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG="ja_JP.UTF-8" ENV LANGUAGE="ja_JP:ja" ENV LC_ALL="ja_JP.UTF-8" # Working directory setting WORKDIR $PATH_LARAVEL手順.4 : mongodb-org.repo 作成
mongodb-org.repo[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc手順.5 : コンテナ起動
コマンドパレットを開いて [remote-containers: Open Folder in Container...] を実行するとコンテナのビルドが始まります。無事にビルドが完了すると、コンテナ内で VSCode が起動します。
参考リンク
- VS CodeでDocker開発コンテナを便利に使おう
- CentOS8にLaravel7をインストールする
- CentOS8にMongoDBをインストールする手順
- Dockerfile リファレンス
- 【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の"開発コンテナ"始めよう
改訂履歴
- 2020/08/11
初版公開 ( ほとんど説明も無い叩き台記事 )
- 投稿日:2020-08-11T17:46:44+09:00
【PHP/Laravel】Class 'Collective\Html\HtmlServiceProvider' not found への対処法
はじめに
Laravelでアプリ開発をしております。
環境構築が完了し、Formを実装した際にエラーが発生。
備忘のために記録しております。
同じような方の助けになれば幸いです。開発環境
・MacOS:10.15.6 (Catalina)
・PHP7.3.20
・Laravel6.18.35対処法
①プロジェクト直下の「composer.json」に「"laravelcollective/html": "^6.0"」を追記
※これでもエラーが起きる場合はLaravelのバージョンとlaravelcollective/htmlのバージョンを合わせる(ex. Laravel5.8なら、laravelcollective/htmlの5.8)。
composer.json"require": { "php": "^7.2", "fideloper/proxy": "^4.0", "laravel/framework": "^6.2", "laravel/tinker": "^2.0" , "laravelcollective/html": "^6.0" },②ターミナルで「composer update」を実行
$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 3 updates, 0 removals - Updating egulias/email-validator (2.1.18 => 2.1.19): Downloading (100%) - Installing league/mime-type-detection (1.4.0): Downloading (100%) - Updating league/flysystem (1.0.70 => 1.1.0): Downloading (100%) - Updating nikic/php-parser (v4.7.0 => v4.8.0): Downloading (100%) - Installing laravelcollective/html (v6.1.2): Downloading (100%) Package jakub-onderka/php-console-color is abandoned, you should avoid using it. Use php-parallel-lint/php-console-color instead. Package jakub-onderka/php-console-highlighter is abandoned, you should avoid using it. Use php-parallel-lint/php-console-highlighter instead. Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: laravelcollective/html Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 40 packages you are using are looking for funding. Use the `composer fund` command to find out more!③「config/app.php」への下記の追記
※Laravel5.5以上はPackage Auto Discoveryが入っているため不要。
config/app.php'providers' => [ Collective\Html\HtmlServiceProvider::class, ], 'aliases' => [ 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, ],以上となります。
以下、参考にさせていただいたサイトも掲載させていただきます。
ご参考にしていただければ。参考文献
・Laravelで「Formクラスが無い」とエラーが出た時の対処法
・【Laravel】Formファサード(laravelcollective/html)をインストールする
- 投稿日:2020-08-11T15:53:49+09:00
Laravelログイン機能にTwitter認証を追加するのに参考にした記事まとめ
前提、私の環境ではLaravelバージョン6.xです。
バージョン5.x以前とでは処理が違う部分があるそうさので注意。Laravel Socialite 4.x でソーシャルログイン(OAuth認証)を行う
https://www.ritolab.com/entry/207データベース周りはこちらの記事を参考にしました。
https://qiita.com/tetsu-upstr/items/d1cccfac362872ed140cすでにusersテーブルは作ってしまっていたので、changeについてはこちを参考
https://qiita.com/shosho/items/a5a5839735dfef9214b1
- 投稿日:2020-08-11T12:26:32+09:00
Docker × Laravel テスト用のデータベースコンテナを構築する
Laravelでデータベースのテストを行う時、
RefreshDatabase
やfactory
など便利なメソッドやトレイトが用意されています。
これらを使ってテストを行いますが、Dockerでデータベースコンテナ一つでやると開発で使ってるデータがクリアされてしまってあまりよろしくないです。今回はテストする時はテスト用のデータベースを使うように設定します。
前提
当記事は上記の記事の補足になる記事です。
Laravel環境構築
$ git clone git@github.com:ucan-lab/docker-laravel.git $ cd docker-laravel/infrastructure $ make create-project手順
infrastructure/docker-compose.yml を編集する
$ cd infrastructure $ docker-compose down※
docker-compose.yml
やDockerfile
を変更する場合は予めコンテナを破棄しておくと良いです。infrastructure/docker-compose.ymldb-testing: build: ./docker/mysql tmpfs: - /var/lib/mysql
db-testing
サービスの設定をservices
配下に追記します。
- https://docs.docker.com/compose/compose-file/#tmpfs
- https://docs.docker.com/storage/tmpfs/#limitations-of-tmpfs-mounts
tmpfsはLinux環境でのみ動作すると書いてありましたが、Docker for Macでも動作するっぽいので使ってみました。
動かない場合はnamed volumeを使うといいかもです。$ docker-compose up -dコンテナを作成して起動します。
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------- docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-laravel_db-testing_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp docker-laravel_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
db-testing
のコンテナが起動していればokです。backend/phpunit.xml
backend/phpunit.xml<php> <server name="APP_ENV" value="testing"/> <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="array"/> <server name="DB_CONNECTION" value="sqlite"/> <server name="DB_DATABASE" value=":memory:"/> <server name="MAIL_MAILER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="TELESCOPE_ENABLED" value="false"/> </php>backend/phpunit.xml<php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <env name="DB_HOST" value="db-testing" force="true"/> <env name="MAIL_MAILER" value="array"/> <env name="QUEUE_CONNECTION" value="sync"/> <env name="SESSION_DRIVER" value="array"/> <env name="TELESCOPE_ENABLED" value="false"/> </php>
server
ではなくenv
に変更してます。
Dockerfile
でDB_HOST
のサーバー環境変数を設定しているので、force="true"
オプションで上書きしてあげます。サンプルのテストを作成
backend/tests/Feature/SampleTest.php<?php declare(strict_types=1); namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; use App\User; class SampleTest extends TestCase { use RefreshDatabase; /** * A basic feature test example. * * @return void */ public function testExample() { factory(User::class)->create(['name' => 'sample']); $this->assertEquals(1, User::where('name', 'sample')->count()); } }テスト実行
$ php artisan test PASS Tests\Unit\ExampleTest ✓ basic test PASS Tests\Feature\ExampleTest ✓ basic test PASS Tests\Feature\SampleTest ✓ example Tests: 3 passed Time: 3.74sテストが通ったことを確認できればokです。
db
データベースのデータも消えていないことを確認してください。補足: backend/.env.testing
phpunit.xml
ではなく.env.testing
で環境変数を上書きする方法もあります。
その場合、Dockerfile
で設定したサーバー環境変数の方が優先されてしまうのでそちらは削除してください。$ cp .env.example .env.testing $ php artisan key:generate --env=testing.env.testingDB_CONNECTION=mysql DB_HOST=db-testing DB_PORT=3306 DB_DATABASE=laravel_local DB_USERNAME=phper DB_PASSWORD=secret
- 投稿日:2020-08-11T10:32:54+09:00
Laravel6.x以上にBootstrapを導入
Laravel6.x以上にBootsrapを導入
ターミナル上で以下のコマンドを打つ必要あり
ターミナル$ composer require laravel/ui $ php artisan ui bootstrap $ npm install && npm run devインストールされたか確認
CSS
publicの下にcssのフォルダが作成されていたら成功!
public/css/app.css/*! * Bootstrap v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2020 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */
入ってますね。
Javascript
publicの下にjsのフォルダが作成されていたら成功!
app.jsというファイルが入っているはずです。head情報に読み込むためのコードを埋め込む
<link href="{{ asset('/css/app.css') }}" rel="stylesheet">
asset('ファイルパス')はpublicディレクトリのパスを返す関数。
ということは、
publicの直下なら
asset('/app.css')
publicの下にcssというディレクトリを作ってその中にcssファイルを入れるなら
asset('/css/app.css')
<script src="{{ asset('/js/app.js') }}"></script>
- 投稿日:2020-08-11T09:12:11+09:00
【Laravel】メール送信機能
はじめに
問い合わせフォームで問い合わせがあった場合に、内容をメールで通知するシステムを組んだ際の備忘録。
LaravelのMailableクラスを利用し送信します。
ファイル構成
app
|- Http
| |- SendController.php
|
|- SendMail.phpresources
|- views
|- contact
|- mail.blade.php.env
コード
Controller
send
メソッドの引数に、Mailable
クラスを継承したクラスを渡す。SendController.php<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Mail; use Illuminate\Http\Request; class SendController extends Controller { public function submit(Request $req){ //メールを送信 Mail::to("送信先アドレス") ->send(new SendMail($req['message'])); return view('sample'); } }Mailableクラス
コンストラクタで表示するメッセージリストを受け取る。
build
メソッドで、あらかじめ準備したbladeを利用して本文を作成する。
HTMLメールの場合view
メソッド、通常テキストの場合text
メソッドを使う。SendMail.php<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class SendMail extends Mailable { use Queueable, SerializesModels; protected $message; /** * Create a new message instance. * * @return void */ public function __construct($message) { //コンストラクタで表示するメッセージを受け取る $this->message = $message; } /** * Build the message. * * @return $this */ public function build() { return $this->text('contact.mail') ->subject('件名') ->with(['message' => $this->message]); } }View
変数を展開して本文を作成する。
mail.blade.php問い合わせが来ました。 --------------------- 名前:{{$message->name}} アドレス:{{$message->address}} 内容:{{$message->body}} ---------------------.env
.env
にメールサーバの情報を記載する。.envMAIL_MAILER=smtp MAIL_HOST=*** MAIL_PORT=*** MAIL_USERNAME=*** MAIL_PASSWORD=*** MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=*** MAIL_FROM_NAME="${APP_NAME}"最後に
利用するサーバの情報が間違っていてはまりました。
処理を何度も見直したことで理解が深まったのでOK!!!
- 投稿日:2020-08-11T02:32:28+09:00
Laravel 6.x CasherでStripe決済するときに参考になる資料
やりたいこと
Laravel 6.xでCasherを用いてstripeから決済をしたい
問題
6.x未満の古い記事がおおいのと、ドキュメントから動作を想像しづらい
1.翻訳ドキュメント
おなじみのreadouble
インストールや設定等、基本的にはここのを行えばいいが
イメージがしづらいhttps://readouble.com/laravel/6.x/ja/billing.html
2.Youtube
https://www.youtube.com/watch?v=OtLmqDpH-C8
こちらの動画が公式ドキュメントに沿って行っているのでイメージがしやすい
翻訳ドキュメントとと合わせると良い感じ詰まったところ
郵便番号を非表示に
https://blog.ichikaway.com/entry/2019/05/29/180537
https://stripe.com/docs/js/elements_object/create_element?type=cardサブスクリプションでIdが必要だが、[No such plan]となった