- 0.1. 【SQL】テーブル結合 JOIN の条件絞り込み
- 0.2. Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
- 0.3. LaravelでURLを取得する方法いろいろ【初心者向け】
- 0.4. Laravel5.7→5.8へのバージョンアップでどハマり。Cache::lock()の仕様が変わっていた
- 0.5. PHP sprintf関数の意味・動作
- 0.6. Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
- 0.7. 【PHP】AtCoder Beginners Selectionを解いてみた
- 0.8. 【PHP】標準入力・標準出力を楽に記述するための工夫【AtCoder】
- 0.9. PHPでコードゴルフ
- 1. はじめに
- 2. 公式
- 2.10. Laravel9で作成したアプリをAWSにデプロイする
- 2.11. 【PHP8.x】非対称な可視性を導入したい
- 2.12. cron(クロン)実行先でcron(クロン)一元管理?
- 2.13. Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較
- 2.14. Laravel 9 + VITEの開発環境をdockerで実現する方法
- 2.15. Laravel Sailをdevcontainerで動かすときは下準備が必要
- 2.16. Laravelテストのメモ
- 2.17. 【Laravel】Carbonを使ってみた
- 2.18. UMLを使ってクラス図を書く方法
- 2.19. 【Docker初歩の初歩】DockerでApache+PHP+MySQLなLAMP環境構築をする(ついでに簡単な掲示板を作って動かす)
- 2.20. コードを変更したのにブラウザに反映されない場合の対処法【Chrome】
【SQL】テーブル結合 JOIN の条件絞り込み
SQLのテーブル結合で考え違いをしていたことが発覚したので、記録しておきます。
###### 前提1:下記のような2つのテーブルA、Bを結合して全ての売り上げデータを表示させたい、とします。
###### 前提2:両テーブルの flgカラム が 0(有効)のデータだけに絞り込みたい、とします。
【テーブル名:A(売上トランザクション)】
|`flg` |`date` |`code`|`suryo`|
|———|———–|———-|——|
|1 |2022/02/01 |A001 |5 |
|0 |2022/02/01 |A001 |6 |
|0 |2022/02/05 |A003 |3 |
|0 |2022/02/10 |A003 |4 ||
【テーブル名:B(商品マスター)】
|`flg` |`code`|`name`|`price`|
|———–|———|—
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
# DATETIME型を追加したらエラーに阻まれた
PHP初学者です。
phpmyadminでDATETIME型を追加した際に3時間ぐらい沼って抜け出せたので共有したいと思います。# エラー文
“`
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
“`
![スクリーンショット 2022-10-11 22.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708236/07a18587-b99a-36bf-dc58-ad07694abad3.png)
# 原因
TIMEDATE型は既にレコードが存在していると既存のレコードに値を補完できずに失敗する仕様みたいです# 追加するには
# 1 レコードの中身を空にする
操作をクリックして下の方にある”テーブルを空にする”を実行すると追加できます
![スクリーンショット 2022-10-11 23.18.0
LaravelでURLを取得する方法いろいろ【初心者向け】
## 背景
最近Laravelで開発をすることが多いのですが、レビューでURLを直書きしないように複数回指摘を受けました。
そしてその修正をする中で学んだURLの取得方法を紹介します。## サイト内のURLを取得したい
Laravelで定義したルートには`nameメソッド`で名前をつけることができます。
“`
// 名前付きルート
Route::get(‘/user/profile’, function () {})->name(‘profile’);
“`
routeメソッドを使えばURLを以下のように生成することができ、とても便利です。“`
プロフィールへ
“`
URL直書きで書いても動作自体は変わりませんが、URLのパスを修正したい時に一つ一つ変更する必要がありとても手間がかかります。名前付きルートであれば変更箇所が1つになって楽ですよね。## 外部サイトのURLを取得したい
外部のページに飛ばしたい時は、基本的にURL直書きで問題無いと思います。
“`
Laravel5.7→5.8へのバージョンアップでどハマり。Cache::lock()の仕様が変わっていたLaravel5.8からCache::lock()に第三引数`$owner`が追加されました。
この引数はデフォルトがnullに設定されているので、5.7までのままだと第三引数には自動的にnullが渡されます。
`vendor/laravel/framework/src/Illuminate/Cache/Lock.php`のコンストラクタに
“`
if (is_null($owner)) {
$owner = Str::random();
}
“`
なんてのが追記されていたため、予期せぬ挙動に…。ソースコードを追っていくと、**5.7までと同じ挙動にするには第三引数に数字の1を渡す必要**がありました。
[公式のアップグレードガイド](https://readouble.com/laravel/5.8/ja/upgrade.html)にも乗っておらず、えらいハマったので怒りの備忘録を残しておきます。
PHP sprintf関数の意味・動作
なかなか使う機会がなく知らなかったのでメモ。
### PHPマニュアル
[sprintf](https://www.php.net/manual/ja/function.sprintf.php)
## 説明:
“`jsx
sprintf(string $format, mixed …$values): string
“`フォーマット文字列 **`format`** に基づき生成された文字列を返します。
## 例
“`php
$example .= sprintf(““, “hoge”, $fuga, $foo, $baz, $boo, $bar);
“`**自分なりの理解**
$fromatの中身の%の数分$valuesを渡す。
n番目の%に置換される文字列が$valuesのn番目のあたる引数。%sみたいなのは指定子でsの場合は引数を文字列で扱う。
%sの場合は引数を文字列として置換する。
Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
# Python
https://qiita.com/_dakc_/items/e663359c81645bc4e65e
# Ruby
https://qiita.com/jnchito/items/ff4f7a23addbd8dbc460
# PHP
https://qiita.com/yamato1491038/items/7aa0168a6145749db78c
# Java
https://qiita.com/ryuutamaehara/items/c8efb304b73cc0542e6f
# JavaScript
https://qiita.com/jintz/items/61af86a12b53b24ef121
# Perl
https://perlzemi.
【PHP】AtCoder Beginners Selectionを解いてみた
## はじめに
[AtCoder Beginners Selection](https://atcoder.jp/contests/abs) をPHPで解いてみました。PHPでAtCoderを始めてみたいという方のご参考になれば幸いです。
標準入力・標準出力とテンプレートについては以下の記事で解説しています。ソースコードはすべてこのテンプレートを使用して作成していますのでご了承ください。
https://qiita.com/noko206/items/800649132ff050635ff0
## [第1問:ABC086A – Product](https://atcoder.jp/contests/abs/tasks/abc086_a)
### 問題
二つの正整数 $a,b$ があります。$a$ と $b$ の積が偶数なら `Even` 、奇数なら `Odd` を出力してください。
* $1 \le a,b \le 10000$
* 入力はすべて整数### 解法
ある整数が「偶数である」とは「 $2$ の倍数である」と言い換えることができます。よって、$a$ と
【PHP】標準入力・標準出力を楽に記述するための工夫【AtCoder】
## はじめに
PHPでAtCoderを解いていると標準入力の受け取りが大変面倒に感じます。しかし、工夫次第で快適に標準入力を受け取れるようになりますので、そのための方法をまとめていきます。(ついでに標準出力も少しだけ工夫します。)
## 問題
### [PracticeA – Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)
整数 $a,b,c$ と、文字列 $s$ が与えられます。
$a+b+c$ の計算結果と、文字列 $s$ を並べて表示してください。* $1 \le a,b,c \le 1000$
* $1 \le |s| \le 100$## 標準入力
標準入力は `fgets` 関数で取得します。
“`PHP
PHPでコードゴルフ
はじめに
コードゴルフって面白いですね。
あれこれ考えていると普段見かけないソースが生まれたりして新鮮な気持ちになれました。
日頃PHPを書かない人もいると思いますので、敷居が下がればと思い使いそうなものをざっくりまとめておきます。
(比較に関することは例によって闇が深い書いていないため、公式ページを参照してください)公式
すべてここに書いてあります
https://www.php.net/manual/ja/langref.php変数宣言
“`php
// 変数名は必ず$をつけます。
$hoge = ‘1’;// 数字から始まる以下のような変数名は無効です。
$1 = ‘1’;
$1_hoge = ’11’;// 大文字小文字違いは別の変数として扱われます。
$hoge = ‘あ’;
$HOGE = ‘い’;
echo $hoge;// あ
echo
Laravel9で作成したアプリをAWSにデプロイする
# 前書き
今回は、作成したポートフォリオをAWS上に作成した本番環境にデプロイしてみました。# 環境
https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
上記記事に準じて環境構築を行っています、
また、VPC・EC2インスタンス・RDSの作成については省略します。
# 実現したいこと
・AWS上にデプロイし、作成したアプリを公開# 対応方法
## ①EC2インスタンスに各種インストール
○各種アップデート
“`
sudo yum update -y
“`○webサーバーインストール→今回はnginx
“`
sudo amazon-linux-extras enable nginx1
sudo yum install nginx -y
“`○phpインストール
→php8.1のインストールにはamazon-linux-extrasコマンドが使用不可
→eoel(Extra Packages for Enterprise Linux)を使用して導入する
“`
# php8.1と関連するモジュ
【PHP8.x】非対称な可視性を導入したい
Swiftでは読み込みと書き込みで[異なる可視性を設定することができます](https://qiita.com/codelynx/items/43e1c4f176730d952d13)。
“`swift
private (set) public var count: Int = 0 // 読み込みはpublic、書き込みはprivate
“`そんなわけで節操のないPHPは、この機能もPHPに取り込もうと企んでいます。
以下は該当のRFC、[Asymmetric Visibility](https://wiki.php.net/rfc/asymmetric-visibility)の紹介です。# Asymmetric Visibility
## Introduction
PHPには、前からプロパティの可視性を制御する機能があります。
しかし、その機能はgetとset両方に対して常に同じです。本RFCでは、プロパティの読み取り操作と書き込み操作に対して異なる可視性を与えることを提案します。
具体的にはほぼSwiftから拝借しています。## Proposal
プロ
cron(クロン)実行先でcron(クロン)一元管理?
# cron(クロン)先でcron(クロン)一元管理
https://github.com/taoka-toshiaki/cron-php
### 制作経緯
– レンタルサーバー等のcronの制約を打破したいなと思った事があり制作に至る。
尚、レンタルサーバーでは負荷がある処理はお断りしている場合があるので規約に沿って使用ください。
# 使用方法
– cron.jsonに処理を行い日時、実行コマンドを明記する。
– class_cron.phpに一分間隔で呼び出すようにcronに登録する。
– class_cron.phpを呼び出す際は参照するjsonファイルのパラメーターを渡す事。
– cron.jsonの週の項目は日曜日から始まり、フラグが1の時に起動する。
– cron.jsonの週以外の項目の設定はcrontabの入力方法と同じ関係にあります。“`php:class_cron.php
Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較
Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較
# Python
https://qiita.com/mofumoffy223/items/a461efba5c80acafdbf0
# Ruby
https://qiita.com/suketa/items/ab6b88093de4a54b3b06
# PHP
https://qiita.com/nuuuuume/items/fd2e0d69fb5430c26bd0
# Java
https://qiita.com/haruto167/items/162551100449ea5c7e6d
# JavaScript
https://www.sejuku.net/blog/65313
# Perl
https://perlzemi.com/blog/20161130148051.h
Laravel 9 + VITEの開発環境をdockerで実現する方法
Laravel 9でLaravel Mixの代わりに新しく導入されたViteを使えるLaravel開発環境を、docker上に実現する方法を紹介します。
# ゴール
– WindowsやMac上に、dockerを使ったLaravel 9開発環境を作る。
– Laravel MixではなくViteを使う
– サーバーはnginx, php, mysqlを別にする。
– Viteの利点であるページリロード無しでのCSS/JS更新を実現する。## ところでViteの発音は?
Viteは「ヴィート」と発音します。フランス語だそうです。アメリカ人なら「ヴァイト」と読みそうですが、アメリカ人も「ヴィート」と読んでます。
## ところでLaravel Mixではだめなのか?
Laravel 9の途中から、フロントエンド・ビルド・ツールとして長年標準だったLaravel Mixが非標準となりViteが標準となりました。
現時点では[Laravel 9公式でMixもサポート](https://laravel.com/docs/9.x/mix)しています。したがって、現時点でMixを使うこと
Laravel Sailをdevcontainerで動かすときは下準備が必要
サンプルはこちら。
https://github.com/tsubakimoto/1009laravel
—
Laravel Sail とは、Laravel の開発環境をコンテナーでセットアップするためのツールです。
https://readouble.com/laravel/9.x/ja/sail.html
コンテナーで動作するということは、devcontainer で動かしたくなるものです。
Laravel Sail には devcontainer.json や docker-compose.yml を準備するコマンドも用意されています。https://readouble.com/laravel/9.x/ja/sail.html#using-devcontainers
### .devcontainer/devcontainer.json
“`json
// https://aka.ms/devcontainer.json
{
“name”: “Existing Docker Compose (Extend)”,
“dockerComposeFile
Laravelテストのメモ
Laravel+PHPUnitのテストについてのメモ。
なお、Laravel5系をベースにしたプログラムなので一部いまと違うかも。。
# 基本的な形
“`php
states(‘active’)->create([
‘last_login_at’ => Carbon::yesterday()
]);$response = $this->actingAs($user)
->json(‘get’, route(‘users.me.get’));$response->as
【Laravel】Carbonを使ってみた
# はじめに
携わっている案件で、ユーザーがクーポンを使用する際にそのクーポンが有効期限内であるかどうかを確認する際にCarbonを使ったため、個人の備忘録として記事にしてみました。# 今回の状況
“` php
use Carbon\Carbon;public function createFromRequest(BaseRequest $request)
{
$requestData = $request->fillData();// 有効期間の終了日
$requestData[‘end_date_of_expiry’] = ‘2022-09-30’;$endDateOfExpiry = new Carbon($requestData[‘end_date_of_expiry’]);
// 出力内容 $endDateOfExpiry = 2022-09-30 00:00:00;
}
“`
上記の様に リクエストデータが日付のみのため、変数$endDateOfExpiryの時間は、00:00:00になってしまいます。
UMLを使ってクラス図を書く方法
## 目次
– 概要
– そもそもUMLって何?
– UMLでクラス図を書いてみる
– 最後に## 概要
最近一気に寒くなってきてまだ衣替えしていなく、半袖半ズボンで寝てるので三連休で衣替えしようと思います?さて今回のスキルアップのための不定期30分インプット・アウトプット投稿第三段は、「UMLを使ってクラス図を書く方法」ついてやっていこうと思います!
第二弾は、[Dockerを使ってPHPを実行する方法](https://qiita.com/kitamurakunihiko/items/bf2e9998efceff115a0f)について投稿したのでよければ確認してみてください。
## そもそもUMLって何?
wikiだと下記のような定義らしいです。
>ソフトウェア工学で用いられる、汎用的かつ開発方面に特化させたモデリング言語である。
システム設計を視覚的に図式化しての標準化されたモデリング手法の提供を目的にしている。
UML(Unified Modeling Language)の略語で呼ばれることが多い。オブジェクト指向分野でよく用いられている。ということで噛み砕く
【Docker初歩の初歩】DockerでApache+PHP+MySQLなLAMP環境構築をする(ついでに簡単な掲示板を作って動かす)
# 概要
Dockerを使ってApache+PHP+MySQLな環境構築を行う。ついでにphpMyAdminも使えるようにする。動作確認で簡単な掲示板を作る。対象はDockerって何?触ったことないよ?くらいの人。# 前提
以下のものがインストールされている必要があります
– Git
– https://git-scm.com/
– Docker
– https://matsuand.github.io/docs.docker.jp.onthefly/get-docker/
– 私はWindows+WSL2な環境なので、Docker Desktop for Windowsを利用しています。# まずはこいつを見てくれ
https://github.com/miya-38-a/docker-apache-php-mysqlこのリポジトリをクローンして、リポジトリのルートディレクトリ配下で以下を叩いてください。
“`
$ docker-compose up
“`するとなにやら英語がたくさん出てきます(アホみたいな感想)。
初回は結構時間がかかるので
コードを変更したのにブラウザに反映されない場合の対処法【Chrome】
# キャッシュが問題かも
## 方法1
Ctrl + Shift + R を押してハードリロードしてみてください。
キャッシュがクリアされます。
## 方法2
F12またはCtrl Shift Iでデペロッパーツールを開き、アドレスバー横の再読み込みのボタンを右クリック、キャッシュの消去とハード再読み込みを実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700063/fa47433b-4116-e1b8-31e8-889c6d2684ea.png)
# 直らない場合
設定→プライバシーとセキュリティ→閲覧履歴データの削除
「キャッシュされた画像とファイル」だけを選択し、全期間で削除してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700063/88d8b23e-67ea-a99a-5f4e-c0d3572d244c.png)