PHP関連のことを調べてみた

PHP関連のことを調べてみた

EloquentのwithCountメソッドでリレーション先のレコード数を取得する方法

## はじめに
「リレーション先のレコードは使わないけど、取得したレコードの数は見たい」という状況が稀にあります
自分はリレーション先のカラムをidにしView側でCountしていましたが、これをModelだけで実現できる`withCount`メソッドに感動したので解説していきます

## withCountメソッドの基本
`withCount`メソッドは、リレーションシップのレコード数をカウントし、結果に追加するために使用されます
例えば、Userモデルが複数の投稿(posts)を持っている場合、各ユーザーの投稿数をカウントして取得できます
これは非常に便利です

## 基本的なwithCountの使用
ユーザーモデルとポストモデルが1対多の関係にある場合、以下のように`withCount`メソッドを使用します

モデルの定義
“`User.php
public function posts()
{
return $this->hasMany(Post::class);
}
“`

クエリの使用例
“`php
$users = User::withCount(‘posts’

元記事を表示

PHPにおける isset と !empty の違い

`isset` と `!empty` はどちらも変数の値をチェックする関数ですが、それぞれ異なる動作をします。

**`isset`**

* 変数が宣言されていて、かつ `NULL` ではない場合に `true` を返します。
* 変数の値が空文字 (“”) や数値の 0 であっても `true` を返します。
* 未定義の変数に対して使用すると **Fatal error** を発生します。

**`!empty`**

* 以下のいずれかに該当する場合に `true` を返します。
* 変数が `NULL` である。
* 変数が空文字 (“”) である。
* 変数が数値の 0 である。
* 変数が `false` である。
* 変数が **未定義** である。
* 変数に値が設定されている場合は、たとえそれが空文字や数値の 0 であっても `false` を返します。

**例**

“`php
$var1 = “”;
$var2 = 0;
$var3 = null;
$var4 = false;

var_dump(isset($var

元記事を表示

【備忘録】CakePHPのよく使うコマンド

# はじめに

こんにちは、エンジニアのkeitaMaxです。

CakePHPのよく使うコマンドを備忘録として残していきます。

# マイグレーション

### マイグレーションファイルを作成

“`
bin/cake bake migration CreateArticles created modified
“`

### マイグレーションファイルを実行

“`
bin/cake migrations migrate
“`

### マイグレーションファイルのロールバック

“`
bin/cake migrations rollback
“`

# コントローラ

### コントローラの作成

“`
bin/cake bake controller articles
“`

# モデル

### モデルの作成

“`
bin/cake bake model articles
“`

# テスト

## PHPUnit

### 全部実行する
“`
vendor/bin/phpunit
“`

### 特定のファイルだけ実行する
`tests/TestCas

元記事を表示

【Laravel】【Vue.js】プロジェクト作成手順①

# はじめに
Laravel(バックエンド)とVue.js(フロントエンド)を組み合わせたシステムを構築する
手順を記述します。

# 事前準備
以下がインストール済み・環境構築済みであること。
手順は別記事でまとめておりますので、ご参考になれば幸いです。
– PHP
– Composer
– PHPデバッグ環境構築(Xdebug・PHP Debug)

# Laravelアプリ作成手順
### ① プロジェクト用のディレクトリを作成
 ※私は「C:\work\demo」のように作成しました。
### ② Laravelプロジェクト作成
**(1) VSCodeで①ディレクトリを開く**
![アプリ作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2846445/898fef6d-389d-fa81-c152-e6d86331a4b3.png)
**(2) メニューバー[ターミナル] > [新しいターミナル] でターミナルを起動**
![アプリ作成02.png](https://qiita-ima

元記事を表示

amazon linux2023にphp5.6を入れたい

## 背景
既存のシステムがamazon linux2だったがもうそろそろサービスが終了するということで、amazon linux 2023に移行しますのでとりあえず既存システム同じ環境を用意してください~となり見てみたところPHP5.6が使われてるじゃないですか~~~

ほなじゃあphp入れるのにまずepel君入れますか~
“`
sudo amazon-linux-extras install epel
“`
すると
“`
amazon-linux-extras command not found
“`
amazon-linux-extras君はいないって怒られた(´・ω・`)

なななんとamazon linux 2023には搭載してないらしい…

## やったこと
epelが入れられないのでremiリポジトリからインストールを断念してソースコードを入れてビルドする方針に変えてやります
まずビルドに必要なパッケージを入れるとこから始めよう
“`
sudo yum install -y gcc gcc-c++ make automake autoconf kernel-de

元記事を表示

【PHP】Qiita/RSSフィード解析

QiitaのRSSフィード活用されていますか?
個人サイトや、推しメンの記事を確認するのに結構便利です。

↓↓ Feedの存在知らない方はこちら ↓↓

https://qiita.com/umekikazuya/feed


今回は個人用に提供されているRSSフィードをPHPで解析してみました。

公式からRSSが提供されているのに、わざわざ解析してJSON化する意味がわからない…。って思う方もいると思います。
用途は人それぞれですが、「毎朝Slack通知したい」「記録として残したい」「独自のAPIを用意して、複数のアプリで使いまわしたい」とか、まぁ役立ちそうですよね。

**「HTTP通信」をして「XMLの解析」をして「JSON化」する。**
わりと、初学者の学習にぴったりな題材な気がします。

## 使用ライブラリ
### Guzzle Http Client

HTTP通信のためにGuzzleライブラリを利用します。

https://docs.guzzlephp.org/en/stable/

## 実装例
さっそくですが実装例を紹介。
(※ 記事用に細かい例外処

元記事を表示

bluesky api php で post

参考
https://mgng.mugbum.info/1699

# blue sky で post したい

1 アプリパスワードを作成
https://bsky.app/settings/app-passwords

2 パスワードを設定

“`.env
BLUESKY_APP_PASSWORD = xxx-xxxx-xxx-xxx
“`

“`app.php
‘bluesky_app_password’ => env(‘BLUESKY_APP_PASSWORD’)
“`

続いてモデル

“`bluesky.php
class Bluesky extends Model
{

public $jwt;
public $handle;

public function __construct($handle,$password)
{
$this->handle = $handle;

$ch = curl_init(“https://bsky.social/xrpc/com.atproto.serve

元記事を表示

Laravel にてユニットテスト実行時、DBの外部キー制約を無効化する

よく忘れるのでメモ

というか調べていて初めて知りましたが、いつの間にやらLaravel標準で用意してくれていた模様

“`php
use Illuminate\Support\Facades\Schema;

// 外部キー制約を無効化
Schema::disableForeignKeyConstraints();
// 外部キー制約を有効化
Schema::enableForeignKeyConstraints();
“`

## 以前のやり方

利用しているのが MySQL だったので問題ありませんでしたが、どうやら PostgreSQL では動かないようで…

やはりLaravel標準で用意されていたらそれを使うに限りますね

“`php
use Illuminate\Support\Facades\DB;

// 外部キー制約を無効化
DB::statement(‘SET FOREIGN_KEY_CHECKS=0;’);
// 外部キー制約を有効化
DB::statement(‘SET FOREIGN_KEY_CHECKS=1;’);
“`

## 改めて使い方

元記事を表示

【CakePHP5】PHPUnitでテストをしてみる

# はじめに

こんにちは、エンジニアのkeitaMaxです。

今回は、以前作成したCakePHPの環境をつかってテストコードを書いていきます。

https://qiita.com/keitaMax/items/6152aa9fff66bee4e887

# インストール
>CakePHP には PHPUnit をベースとした高度なインテグレーションが組み込まれており、PHPUnit 本体が持つ機能に加えて、CakePHPでテストをスマートに管理するための便利な拡張機能を備えています。
(引用:https://book.cakephp.org/5/ja/development/testing.html)

CakePHPはインストールしなくてもすでに組み込まれているので、インストールは必要ないです。

# テストを作成

コントローラとモデルを作成するコマンドを打った時に一緒にテストを書くファイルお作成されます。

コントローラとモデルを作成については以前記事書いているので以下を参照してください。

https://qiita.com/keitaMax/items/b260eb38

元記事を表示

これであなたもマルチリンガル!?色んな言語であいさつしてみよう

# はじめに
みなさん,言語を学び始めるときにはじめに覚えるものはなんですか?そう!**『あいさつ』** です.これは自然言語に限らず,プログラミング言語でもそうです.どんな言語もまずは`Hello World!`の出力方法から学ぶはずです!!っということで,今回は全何種の言語であいさつをしてみましょう.この記事を読めばあなたもマルチリンガルになっているはずです^^

# 人気言語10選
ここに書かれているランキングですので,自分にとっての好きな言語ランキングなどあれば,コメントに書いておいてください!!

https://codezine.jp/article/detail/19530#:~:text=2024%E5%B9%B4%E4%BA%BA%E6%B0%97%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%AF%E3%80%811%E4%BD%8D

元記事を表示

PhpStormが思いのほかよくなっていた

# 久しぶりにPHPを使う

皆さんは、PHPを書くとき何を使っていますか?
昔はsakura editorや秀丸を使っていましたが最近はもっぱらPhpStormが多いです。
1ファイルだけのバッチっぽい何かの場合は、VsCodeでちゃちゃっとする事もありますが
ファイル分割が必要な規模は、基本的にPhpStormを使います。

## PhpStormの何が良いのか?

個人的にPhpStormのここが良いと思う所は大ざっぱに以下の様なものになると思います。
・インストールした瞬間PHPで必要そうなものは大体入っている
ものぐさな私からすると必要なプラグイン(似たようなプラグインが山のようにあるので選定するのがつらい)を探さなくてよい事です。
・他言語用の統合環境も一通り揃っており操作感もほぼ同じ(全部のせコースを使っている為)
・地味に機能が豊富(設定周りもかなり充実している)
・ローカル AI による行全体コード補完(NEW)

## ローカル AI による行全体コード補完(NEW)

今回は、この機能について話したいと思います。
この機能は、2024.1のバージョンに実装されたも

元記事を表示

CakePHPプロジェクトの作成と実行方法

# CakePHPプロジェクトの作成と実行方法

## CakePHPとは?

[CakePHP](https://cakephp.org/)は、開発者が迅速にWebアプリケーションを構築できるように設計されたオープンソースのPHPウェブフレームワークです。MVC(Model-View-Controller)アーキテクチャに基づいており、データベース操作、フォーム処理、認証、セッション管理などの一般的な開発タスクを簡素化する強力なツールキットを提供します。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qtmbun5z5bqbisz9px85.png)

## CakePHPの主な機能と利点

– **迅速な開発**: 豊富なコード生成ツールを提供し、開発者が一般的なコード構造を迅速に作成できるよう支援します。
– **柔軟で強力なORM**: 組み込みのORM(オブジェクト・リレーショナル・マッピング)レイヤーがデータベース操作を簡素化します。
– **セキュリティ**:

元記事を表示

PHP+Apache+MySQL+phpMyAdminのDocker環境構築してみた!

# はじめに
今年の4月から未経験で関西の受託開発企業に就職し、エンジニアとして働いている者です。これまでXAMPPを使ってローカルで開発を行っておりましたが、新しい技術にも挑戦したい考え、Dockerで開発環境を構築してみました。その時の復習として本記事を書きました。
間違い等ございましたらご指摘をバンバンいただけると幸いです。

# 対象者
– PHPの環境をDockerを使って構築をしたい方
– XAMPPからDockerへ移行したい方

# 目的
– DockerでXAMPPっぽい開発環境を構築し、phpMyAdminとphpinfoをブラウザで表示させる!

※MacBook Air M2 Sonoma14.4、windows 11で動作確認済みです。
※PHPのバージョン7.4.8、 MySQLのバージョン8.1の環境を作成します。

# 目次
| 章 | タイトル |
|—:|————-|
| 1 |Dockerについて|
| 2 |ディレクトリ構成|
| 3 |Dockerfile作成|
| 4 |docker-compo

元記事を表示

LaravelでCSVファイルをインポート(maatwebsite/excel)

LaravelでCSVファイルのインポート機能を作成しようと思い、maatwebsite/excelというライブラリを使ってみました。
メモとして使用例を残しておきます。

## インストール

公式に則って行います。
https://docs.laravel-excel.com/3.1/getting-started/installation.html

“`
composer require maatwebsite/excel
“`
“`
php artisan vendor:publish –provider=”Maatwebsite\Excel\ExcelServiceProvider” –tag=config
“`

`config/excel.php`というファイルが作成されます。

## 前提

今回アップロードしたいCSVのサンプル
“`
企業名,郵便番号,住所,電話番号,代表者名,担当者名,備考
テスト02株式会社,2203456,埼玉県上尾市井戸木,090-4736-0924,佐藤,中島,テストです
“`
上記の1行目をタイトルとして認識させ、2行目

元記事を表示

array_reduceの使用例メモ

array_reduceはPHPの組み込み関数です。

・PHP公式はこちら
https://www.php.net/manual/en/function.array-reduce.php

関数の詳細説明は公式におまかせするとして、この記事ではこんな使用例があったというメモです。

例えば下記のようなコードを書いたとします。

“`php
public function getAmountIncludingTax(array $postings)
{
$totalPrice = 0;
foreach ($postings as $postings) {
$totalPrice += $postings->price;
}
return compact(‘totalPrice’);
}
“`

あるクラスの中にあるメソッドだけを切り取ってます。

`$totalPrice`を初期値で設定して`$positngs`をループで回して、priceカラムを足し合わせるといったものです。

これを下記のようにarray_reduceで書くことができます。

“`

元記事を表示

WebサイトのXSS脆弱性絶対転がす ―Content Security Policyのすすめ―

PHPカンファレンス福岡2024で発表した資料です

元記事を表示

PHPUnit\Framework\SkippedTestError:

https://github.com/sebastianbergmann/phpunit/blob/a2bc7ffdca99f92d959b3f2270529334030bba38/src/Util/Annotation/DocBlock.php#L290

データプロバイダのdataが`[]`のとき、タイトルのようなエラーが発生する

“`php
/**
* Returns the provided data for a method.
*
* @throws Exception
*/
public function getProvidedData(): ?array
{
/** @noinspection SuspiciousBinaryOperationInspection */
$data = $this->getDataFromDataProviderAnnotation($this->docComment) ?? $this->getDataFromTestWithAnno

元記事を表示

EloquentのchunkとchunkByIdの違いと使い分け

:::note

AI要約

– chunkメソッドは、データをオフセットとリミットで分割して処理する
– chunkByIdメソッドは、主キー(ID)を基準にデータを分割して処理する
– chunkメソッドは、データの追加や削除でオフセットがずれるリスクがある
– chunkByIdメソッドは、主キーにより安定したチャンク処理が可能
– 動的データにはchunkById、静的データにはchunkメソッドを使用すると良い

:::

## はじめに
以前`chunk`メソッドに関する記事を書きました

https://qiita.com/t1k2a/items/25f145135a16bc5e3f44

しかし`chunk`メソッドを使用するとデータ更新の際に予期しないことが起きてしまうので
その対策として`chunkById`メソッドがあります
それぞれの違いを見ていきたいと思います

## `chunkById`メソッドとは
主キーを使用してデータをチャンク(塊)に分割し、各チャンクを順次処理します
チャン

元記事を表示

【CakePHP5】コントローラとモデルを作成する

# はじめに

こんにちは、エンジニアのkeitaMaxです。

前回の記事の続きです。

https://qiita.com/keitaMax/items/953002976f2b38e298c5

今回はコントローラとモデルを作成します。

# コントローラを作成

以下コマンドでコントローラを作成します。

“`
bin/cake bake controller articles
“`

実行すると以下のようになります。

“`
root@04a17a8a001b:/app# bin/cake bake controller articles
Baking controller class for Articles…

Creating file /app/src/Controller/ArticlesController.php
Wrote `/app/src/Controller/ArticlesController.php`
Bake is detecting possible fixtures…

Baking test case for App\Cont

元記事を表示

LaravelでAPIをサクッと作成するための指南書

# サクッとLaravelでAPIを作る

“`
作成日: 20240625
最終更新日: 20240626
“`
## 前提
初学者が超簡易的なAPIを作成してみるをテーマにしたレベル感
PHPとcomposerの環境構築がされていること
DBサーバーを仮想環境やローカルに構築済みであること

## 目次

– [サクッとLaravelでAPIを作る方法](#サクッとlaravelでapiを作る方法)
– [前提](#前提)
– [目次](#目次)
– [Laravelプロジェクトの作成](#laravelプロジェクトの作成)
– [envの設定](#envの設定)
– [トラブルシューティング](#トラブルシューティング)
– [Modelの作成](#modelの作成)
– [ソース例](#ソース例)
– [Controllerの作成](#controllerの作成)
– [ルーティングの設定(api.php)](#ルーティングの設定apiphp)
– [ここまでこれたらAPI完成](#ここまでこれたらapi完成)
– [番外編: エラーで困ったらとりあえずキャ

元記事を表示

OTHERカテゴリの最新記事