PHP関連のことを調べてみた2022年07月01日

PHP関連のことを調べてみた2022年07月01日

PHPでランダムな時間を生成

**PHP Ver8.1.3**

DBにぶっこんだら0埋めしてくれそうだけど、これの出力値は0埋めされていません。

“`php
for($i = 0; $i < 5; $i++){ $randomYmdhis = '2022' . '/' . '06' . '/' . rand(1, 30) . ' ' . rand(0, 23) . ':' . rand(0, 59) . ':' . rand(0, 59); echo $randomYmdhis . "\n"; } ``` ``` 2022/06/19 20:12:27 2022/06/26 4:45:48 2022/06/7 7:57:11 2022/06/28 4:36:49 2022/06/1 11:24:47 ``` 時間計測(1000件) ```php $start = microtime(true); for($i = 0; $i < 1000; $i++){ $randomYmdhis = '2022' . '/' . '06' . '/' . rand(1, 30) . ' '

元記事を表示

array_multisort(): Array sizes are inconsistent

**array_multisort()のパラメータ1にnullが混ざった配列を渡すと駄目みたい。**

“`php:NG
$sortKeys = [“a”,”b”,”c”,”d”,null,”e”,”f”];
array_multisort($sortKeys, SORT_DESC, $arr);
“`

元記事を表示

windowsにPHPを入れてみた

## PHPのインストールが難しかった
私は英語が大層苦手で、バージョンも沢山あってよく分からなかったのでやったことを残しておきます。
[PHPマニュアル](https://www.php.net/manual/ja/install.php)を読んでできる人は全く問題ないです。

# PHPのインストール方法

[PHP For Windows : Home](https://windows.php.net/index.php)にアクセスします。
タブの2つ目に`Downloads`があるのでクリックします。

[![Image from Gyazo](https://i.gyazo.com/4e17dc7117f9f4be7d1258ba97da4e37.png)](https://gyazo.com/4e17dc7117f9f4be7d1258ba97da4e37)

何を入れていいか分からないですが、グレー枠の上から2番目のZipファイルをダウンロードします。ApacheというWebサーバーを使いたいときにこっちの方がいいらしいという記事を見ただけなので、一番上のZipファイルで

元記事を表示

【Laravel8】親子テーブル(1対多のリレーション)を結合させたcsvファイルのインポート機能

## 初めに
筆者はプログラミング初心者であり個人的な備忘録です。予めご了承ください。

内容
・1対多のリレーションのテーブルの結合処理(JOIN句)
・csvインポート(ダウンロード)機能
・大容量(10万件)のデータを処理するための分割機能chunk&タイムアウト時間の延長

## 環境
Windows 10
XAMMP
PHP 7.4.29
Laravel Framework 8.83.15

## 実装例
ECサイトの商品ページ内のオプション部分の管理画面を作る想定
【例1】Tシャツの色(レッド・ブルー・グリーン)の3通りの選択肢
【例2】Tシャツのサイズ(Sサイズ・Mサイズ・Lサイズ・LLサイズ)の4通りの選択肢
オプションのCSVデータのインポート(ダウンロード)機能を実装する

下記イラストのような関係を持つ2つのテーブルを用意します。
`options`が親で`child_options`が子の関係となります。
![1111.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713225

元記事を表示

【Laravel】Illuminate\Database\Eloquent\Collection::paginate does not exist.

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
ページネーションを実装しようとしたらタイトルのエラー。

“`controller.php
public function show()
{
$readHistories = $request->user()->readHistories()->paginate(25);

return new ReadHistoryCollection($readHistories);
}
“`

“`Models/User.php
public function readHistories(): Collection
{
$hogeReadHistories = $this->hogeReadHistories()->get();
$fugaReadHistories = $this->fugaReadHistories()->get();

return $hogeReadHistories->merge($fugaReadHistories)->sortByDesc(‘c

元記事を表示

【PHPUnit】よりベターなテストの仕方

## 環境

Laravel v9.5.1 (PHP v8.1.3)

## 前提条件

PostモデルにUserで検索する“`scopeByUser()“`を定義している。
Unitテストでこのメソッドをテストしたい。

“`php
public function scopeByUser($query, User $user): Builder
{
return $query->where(‘user_id’, $user->id);
}
“`

## Before

“`php
/**
* scopeByUser()のテスト
* UserでPostを検索することができる
*/
public function testScopeByUser()
{
$users = User::factory()->count(2)->create();
$posts = Post::factory()->for($users[0])->count(5)->create();
$otherPost = Post::factory()

元記事を表示

【PHPUnit】例外のテストは$this->expectException()を先に書く

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 前提条件
“`UserRole“`が“`1~3“`までEnumで定義されてるところに、存在しない“`4“`を入れてエラーが起きることをテストしたい。

## テスト方法
**例外のテストは、テストしたいメソッドより先に書く。**

理由はテストしたいメソッドを先に書くと、そこで例外が発生しエラーで落ちるから。
少し考えれば当たり前なんだけど、普段テストを書きまくっているとつい最後に書くものと思い込んでしまっていた。
“`expectException“`「エラーを期待する」という命名からも先に書くことは予想できる。

“`php
public function testError()
{
$this->expectException(ValueError::class);

UserRole::from(4);
}
“`

## RailsのRSpecでは

“`expect“`のブロックの中にテストしたいメソッドを書くことで例外の発生をテストできる。

“`ruby
subj

元記事を表示

ある値を持つ配列の要素をすべて取得する

## array_filterを使う方法
コメントで教えていただいたのですがこちらの方法のほうがスマートでした。
“`php
$var = [‘apple’, ‘apple’, ‘banana’, ‘apple’];
print_r( array_filter($var, function($v) { return $v === ‘apple’; }) );
/*
Array
(
[0] => apple
[1] => apple
[3] => apple
)
*/
“`

### array_keysを使う方法
`array_search`だと一つの値しか取得できないので、`array_keys`を使う。

まず`array_keys`でキーを取得
“`php
$var = [‘apple’, ‘apple’, ‘banana’, ‘apple’];
$keys = array_keys($var, ‘apple’);
print_r($keys);
“`
“`
Array
(
[0] => 0
[1] => 1
[2] =>

元記事を表示

【PHP】【Laravel】モデルの書き方とコントローラからの呼び出し方

モデルの使い方がいまいちピンと来なかったので、改めて学習して備忘録として残しておきます。

# モデルとは何か

– DBのデータを操作する機能のこと。
– テーブルに対応するモデルがあり、コントローラでモデルを操作すると、DBにデータを書き込んだり、DBからデータを削除したりできる。

# 具体的には

こちらの記事が参考になりました!!
[【Laravel】モデル(Model)とは何か?命名規則やマイグレーションとの関連性|Eloquentやクエリビルダとは何か?](https://prograshi.com/framework/laravel/model-eloquent-and-query-builder/)

# Eloquent

– LaravelでDBを操作する際に使う。
– 下図のように、DB操作のためのメソッドが沢山用意されている。
![スクリーンショット 2022-06-30 11.49.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985164/d89b6fdc-58ab-

元記事を表示

PHP 複数階層にある特定のファイルのみをrequire_onceする

## 名前空間構成
“`json:composer.json
{
“require”: {
<省略>
},
“autoload”: {
“psr-4”:{ “App\\”: “root/” }
}
}
“`

## ディレクトリ構造
“`
root/
├─ functions/
│ ├─ func1.php
│ └─ nest/
│ └─ func2.php
└─ Main.php
“`

## 関数ファイル
“`php:func1.php
namespace App\functions;

function func1() {
echo “func1” . PHP_EOL;
}
“`
“`php:func2.php
namespace App\functions\nest;

function func2() {
echo “func2” . PHP_EOL;
}
“`

## 読み込み
“`php:Main.php
namespace App;

us

元記事を表示

最新Laravle9.19.x ~ のbreeze ログイン実装コマンド

## Laravle9.19.x ~ breeze ログインができない?を解決
みなさんこんにちは
[ジーズアカデミー学校長 山崎ですm(_ _)m](https://gsacademy.jp/mentor/)
今回はLaravel9.19からLOGINを生成するコマンドが変わったようなのでメモしておきます。

### 環境
AmazonLinux2/cloud9

#### Laravel9.19.x ログイン画面作成
##### breezeをインストール

“`cmd:ターミナル

#1. Laravel 9.19~ の場合
composer require laravel/breeze –dev

#2. artisan コマンドを実行
php artisan breeze:install

#3. npmパッケージをインストール
npm install

#4. パッケージをビルド
#公式サイトでは「npm run dev」
npm run build

#5.テーブル作成
php artisan migrate

“`

![スクリーンショット

元記事を表示

[改丁版]早期リターンで簡単リファクタリング

# はじめに
https://qiita.com/ks_jaga/items/6c6a1c0c7e8ac0e2fbdd

以前に投稿したこちらの記事のコードがいまいちだったため、新たに書き直しました。

# ネストの深いコード
ユーザーのログインを判定する関数です。
以下の条件を満たしていればログインを許可します。
– 有料プランであること
– 利用期間内であること
– バンを受けていないこと

“`php
getPlan();

// プランの利用開始日を取得
$contractStartDate = $user->getLastContractStartDate();

// プランの利用終了日を取得
$contractEndDate = $user->getLastContractEndDate();

// ユーザーのバン情報を取

元記事を表示

GtmプラグインでbaserCMSにGoogle Tag Managerのタグを自動で出力。

https://market.basercms.net/products/detail.php?product_id=148

2023 年 7 月 1 日にユニバーサル アナリティクスのサポートは終了すると[アナリティクス公式サイト](https://support.google.com/analytics/answer/11583528)で発表されておりますが、それに伴い、[Google アナリティクス 4 の導入](https://support.google.com/analytics/answer/10089681)を急がれている方も多いかと思います。

また、Google 広告 タグなど、広告の効果測定を行いたいと考えている方も多いかと思います。

そのために「まず既存サイトにGoogleTagManagerを導入したい」と考えている方で、[baserCMS](https://basercms.net/)をお使いの方に方におすすめのプラグインがbaserCMSの[Google Tag Manager コンテナID設定プラグイン(自動出力)](https://market.

元記事を表示

paiza問題集から組になったデータの入力(PHP)

paizaの標準入力問題集から組になったデータの入力をPHPで実装しました。
今回は8番目のデータを標準出力で出力します。

“`PHP
//データの個数を入力する
$num = trim(fgets(STDIN));
for($i=1;$i<=$num;$i++){ //データを入力する $data = trim(fgets(STDIN)); //8番目のデータの場合、標準出力に出力する。 if($i == 8){ echo $data; } } ``` 以上のコードになります。

元記事を表示

Laravel9.1 Sailを使ってDocker開発環境を構築~Herokuへデプロイする(Windows)

Laravel Sailを使ってDocker開発環境を構築&Herokuへのデプロイをしていきます。
Sailを使うとかなり簡単にLaravel + Docker + MySQLなどが揃った開発環境を一気にそろえる事ができます。

Dockerは使いこなせたら非常に強力なんですが、取っ付き辛いですし初学者がいきなり触るとくじける事も多いんじゃないかな・・・とりあえずLaravel触ってみて何かを作ってみたい!ってんならSailは最高のツールだと思います。

ついでにHerokuへのデプロイも。せっかく作ったアプリなので公開しないともったいない。
Herokuへのデプロイもそんなに難しくなかったです。
ちなみにHerokuとは、ざっくり言うとWEBアプリを動かせるサーバ環境を提供しているサービス。
他にもAmazonのAWSとか。

## やってみた感想
いくつか上手くいかないポイントがありましたが大抵打ち間違いだったり、ちょっと調べれば解決する事ばかりでした。

## 環境
Win10+VSC@1.68
Laravel@9.1+PHP@8.1(Sail)
Ubuntu@20.04

元記事を表示

【PHP】TrelloAPIで作成日を取りたい!

PHPで、TrelloAPIからカード情報を取得して
一覧表示するというプログラムを作っています。

欲しい情報が取れなくて2日ほど悩んだのですが、
意外としょぼいところで躓いていたことが判明し
悔しかったので備忘録のために残しておきます。

APIマニュアルの前に、通常のマニュアルを見ろという話だね。
あるあるだね・・・

# TrelloAPIでボードに紐づく全カード情報を取る

ホード情報に紐づくカード全部の情報を取得する(上限1000件っぽい)
APIリファレンスは[こちら](https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-cards-get)

APIキーやトークン取得は他の方が書かれているのでそちらを参照のこと
▶[参考](https://yu88life.com/1748/)

“`
//バージョンやトークンなど{}の値はそれぞれの環境にあったものを設定してください
$_endpoint = “https://api.trello.com/{VERSIO

元記事を表示

【Laravel】DBのデータを取得するAPIを自作し、フロント側から叩いてコンソールに表示させてみる

バックエンドとフロントエンドを切り分けた環境で、バックエンドのデータをフロントエンドに表示させる部分を学習中です。
今回は、データベースのデータを取得するAPIを作って、fetchとasync/awaitでフロント側に表示させることに成功したので、
流れを備忘録として残しておきます。

# 前提
– フロントエンドとバックエンドを切り分けている
– 自作APIを用いる
– データベースを使用する
– PostgreSQL

# 環境
– PHP 8.1.7
– Laravel Framework 9.18.0
– psql (PostgreSQL) 14.4
– MacOS Monterey 12.2.1

# 開発手順

## 1. バックエンド、フロントエンドでそれぞれディレクトリを用意し、別々にターミナルを開いて移動しておく
“`php:ターミナル1
mkdir todo-api
cd todo-api
“`
“`php:ターミナル2
mkdir todo-front
cd todo-front
“`

## 2. フロントエンドのファイルを構成する

– tod

元記事を表示

xdebugがPHP環境に入っているかどうかでvar_dump()の出力形式が変わる

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|

xdebugがPHP環境に入っているかどうかでvar_dump()の出力形式が変わることを知った。

以前、var_dump2($user)でダンプすると、以下の感じだった。シンプルでいい。var_dump2()は「[行数を節約するvar_dump()を書いてみた](https://qiita.com/taconana/items/5cafacc6bb8229e97d3f)」を参照のこと。
“`
class samples\User#1 (4) {
private $mail => string(11) “aaa@xxx.com”
private $id => string(4) “U001”
private $name => string(12) “池田さん”
public $name => string(12) “山本さん”
}
“`
XAMPPを入れ替えて、var_dump2($user)を試すと、以下の感じに変わってし

元記事を表示

配列から指定したデータを直接変数に代入する

TypeScriptで**分割代入**が日常的に使われてるのでPHPでもできるのか調べてたらありました。
PHPで見かけたことがないのでマイナーっぽいです。

## まずは標準的なやり方。
“`php
$array = [1, 2, 3];
$a = $array[0];
$b = $array[1];
$c = $array[2];
“`
## リスト構文を使うやり方。
“`php
[$a, $b, $c] = [1, 2, 3];

//$a 1
//$b 2
//$c 3
“`
## 順不同でよくなるため、連想配列の方が安全に割り当て可能。
“`php
[“a” => $a,”b” => $b,”c” => $c] = [“a” => 1,”b” => 2,”c” => 3];

//$a 1
//$b 2
//$c 3
“`
## compact関数を組み合わせてキーを振った連想配列を組み立ててから使うと便利。
“`php:配列の組み立て
$a = 1;
$b = 2;
$c = 3;

$array = compact(“a”, “b”, “c”);
“`
`

元記事を表示

【Laravel】データベースのデータがブラウザに表示されない

コントローラーで、データベースのデータを取得したいのに上手く取得できないため、そもそもの部分の理解のために備忘録を書きます。

# 前提

– Todoアプリを作っております。
– TodoController.phpのindexアクションが実行された時に、DBのtodosテーブルから全データを引っ張ってこれるようにしたい。

# 現状

### コントローラ
“`php:todo-api/app/Http/Controllers/TodoController.php

元記事を表示

OTHERカテゴリの最新記事