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

PHP関連のことを調べてみた2022年12月17日
目次

【Laravel】Model内で変数をグローバル宣言したい

Model内にクエリビルダを使ってSQLを記述しています。
クロージャ(functionの中のfunction)でグローバル変数を使用したいのですが、`null` が返ってきてしまい、数時間ハマったため備忘録として残します。
## 目次
– 結論
– useとは
## 結論
下記の通り実装することで動作確認できました。
“`php
public function check_notify_user($auth_user_id) {
$query = DB::table(‘notifications as n’)
->leftJoin(‘notification_user as nu’, function ($join) use($auth_user_id){
$join->on(‘n.id’, “=”, ‘nu.notification_id’)
->where(‘nu.user_id’, “=”, $auth_user_id);
})
->where(‘nu.user_id’, null)

元記事を表示

Laravelの外部キー制約についてまとめた

「外部キー制約したい」と思った時に、毎度ネットサーフィンするのが面倒なので、参照用として記録しておきます。

Version → `8.83.26`
PHP → `8.1.12`
## 外部キー制約の追加
### 手順

①親テーブル(`parents`)のマイグレーションファイル作成→`migrate`実行(特別な作業がないので省略)
②子テーブル(`childs`)のマイグレーションファイル作成

“`bash
$ php artisan make:migration create_childs_table
“`

③外部キー制約の追加(ここが肝)

“`php
Schema::create(‘childs’, function (Blueprint $table) {
$table->id();
// ↓ ここに追記
$table->foreignId(‘parent_id’)->constrained(‘parents’)->cascadeOnUpdate()->cascadeOnDelete();
});
“`
### ポイント

`foreignId

元記事を表示

ヒアドキュメントサンプルプログラム(PHP)

PHPでヒアドキュメントのサンプルプログラムをじっそうしました。

“`html





Heredocument1



$name の必殺技は「ズッキュン」です
$name は乃木坂46最年長メンバーです
EOL;

元記事を表示

PHPを使ってOpenSearchServiceで日本語全文検索する(Official PHP Client for OpenSearchを用いて)

この記事は朝日新聞社 [Advent Calendar 2022](https://qiita.com/advent-calendar/2022/asahi)の17日目の記事です?
朝日新聞のエンジニアがバラエティに富んだテック記事をお届けしております!
***

PHPとOpenSearchの公式PHPクライアントであるOfficial PHP Client for OpenSearchを使って、AWSが提供しているフルマネージドのAmazon OpenSearch Serviceにアクセスし、データを取得するための方法を**初心者でも分かるように**解説します。

# 環境
・Amazon OpenSearch Service
・EC2 (Amazon Linux 2)
・PHP 8.0 (インストール済み)
・Apache/2.4.54 (インストール済み)
・Official PHP Client for OpenSearch https://github.com/opensearch-project/opensearch-php

PHPとOfficial PHP Clien

元記事を表示

HTTP通信クライアント、”HttpClient”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の17日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、S

元記事を表示

【Laravel】Undefined class ‘Log’【PhpStorm】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/a3293944-7aa7-8c4b-f113-7177dd446d3e.png)
Warningが出る場合、Laravel IDE Helperをインストールしよう

“`bash
composer require –dev barryvdh/laravel-ide-helper
“`

“`php:config/app.php
‘providers’ => [
/*
* Package Service Providers…
*/
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
“`

“`php:app/Providers/AppServiceProvider.php
public function register()
{
if (

元記事を表示

[Laravel]ランクでソートをする方法+子テーブルでソートする方法

# はじめに
子テーブルにあるS,A,Bのようなランクでソートをかける時に苦戦をしたので、その方法を解説します。

以下のテーブルがある前提で、このテーブルのソートについて解説していきます。
usersとuser_detailsは1対1の関係です
| users |
| —- |
| id |
| name |

| user_details |
| —- |
| id |
| user_id |
| rank |

# ランクでソートする方法
ランクでソートをするにはLaravelのorderbyRawを使用します。
ランクはS,A,Bという値があり、昇順でソートする場合は以下のようになります。
“`php
UserDetail::orderByRaw(“CASE rank
WHEN ‘S’ THEN 1 WHEN ‘A’ THEN 2 WHEN ‘B’ THEN 3 END ASC”);
“)->get()
“`

# 子テーブル+ランクでソートする方法
以下のようにselectで子テーブルの項目を抽出してから、その値でソートをかければできます。(selectを使用

元記事を表示

コードから読み解くautoloadの仕組み ~より深くautoloadの仕組みを理解しよう~

これは[Qiita Advent Calendar 2022 Laravel 17日目](https://qiita.com/advent-calendar/2022/present-calendar)の記事です。

# この記事で扱うこと
この記事は、Laravelで使用されているComposerのautoloadの仕組みについて実際のコードを見ていく中で理解することを目的とした記事です。なので、この記事においてautoloadをどう使用するかについては一切触れていません。

# autloadの仕組みについて

:::note warn
コードを簡略化して解説しやすくするために、この記事で紹介するコードの中で比較的重要ではない(と自分が感じる)部分は省略しています。
:::

## バージョン
| ツール | バージョン |
|:-:|:-:|
| PHP | 8.1.12 |
| Laravel | 8.77.1 |
|Composer|2.4.4|

## 概観
autoloadの仕組みを見る前に全体的にどんな処理になっているかを載せておきます。
それぞれのクラスの処理

元記事を表示

【リファクタリング記事】for文【for(これ;これ;これ)】の内容を正しく説明できますか?よくある勘違いを解説します。

## 【後記】新人研修で教えられないforのお話
これ結構良かったので、勝手にパクリます(なお、パクもラレも本人です)
なんで下書きに残っとるんや…!

元々は過去日に公開していたテーマだったんですが、結構ブラッシュアップしたので別記事になりました。
とはいえ、同じ事を言っているのでそのまま更新して2022アドカレに登録する運びにします。

## 今日いいたいこと
タイトルの通り、for文の

“` php
for(
1. これ;
2. これ;
3. これ
) {
// 処理
}
“`

を正しく説明できるか?というのが本旨です。

## 研修中の説明例
“` php
for(
変数の初期値;
繰り返しの条件;
カッコが終わった後にすること・繰り返しの条件が終わるようにする
) {
// 処理
}
“`

です。
研修など時間が限られている中で解説するため、forを使うだけならこの説明でも良いです。
が、今回取り上げたいのは、この説明は**間違っている**ということです。

### for文をwhile文で書き直してみる
下記にコード例を示します

元記事を表示

LINE WORKS Bot メッセージ送受信機能(Laravel, Line works API 2.0)

## 始めに
LINE WORKS Botチャット機能とwebアプリケーションを連携し、
webアプリケーション側からの送信機能、コールバック値を取得する機能

機能としては、大きく2つ
1、メッセージ通知(送信)
   チャットボットを利用しLINE WORKS上のトークルームにメッセージ送信(ボタン付き)
2、コールバック取得
   トークルームのチャット画面にて、送信されたボタン押下後に、
   値がwebアプリケーション側にコールバックされる

## 環境
| 開発環境 |バージョン |
|———–|————|
| __LINE WORKS API__ | 2.0 |
| __Laravel__ | 8.60.0 |
| __PHP__ | 7.3.10 |

## 初期設定
1、LINE WORKS Developer consoleでアプリを作成する
2、アプリの OAuth Scopes を bot に設定する
3、Bot を作成する
4、Bot の API Interface を API 2.0に設定する
5、Bot の C

元記事を表示

[php]クラスって何?結局わからない!関数との違いは?

## はじめに
クラスって何?結局わからない!
私は今まで何度もクラスについて理解しようとしましたが、挫折を繰り返していました。
今回は、腹を括ってクラスについて学びます。

## まずは関数
以下のような関数を作りました。

“`php
function animals($one,$two,$three){
echo ‘あなたの好きな動物は’.$one.’と’.$two.’と’.$three.’ですね!’;
}
“`
はい。
好きな動物3つを引数(ひきすう)に渡して表示するだけのなくても良いような関数です。
これをクラス化してみます。
“`php
class Like_animals{
public $one;
public $two;
public $three;

public __construct($one,$two,$three){//コンストラクタ。クラスが呼び出された時に最初に実行されるもの
$this->one = $one;
$this->two = $two;
$this->three = $three;
}

public E

元記事を表示

phpで改行ごとに配列で分ける方法

## はじめに。
備忘録。

## コード
“`php
explode(‘\n’,$mojis);
“`

## 説明
“`explode()“`関数は区切り文字ごとに配列に分ける働きをします。例えば、
“`php
$moji = “東京,神奈川,埼玉,千葉,茨城”;
“`
という文字列に
“`php
explode(‘,’,$moji);
“`
とすると、
“`php
array(‘東京’,’神奈川’,’埼玉’,’千葉’,’茨城’);
“`
というふうに返ってきます。

なので、区切り文字に改行を表す“`\n“`を入れてあげれば、改行ごとに配列になって出てくるわけです。

## 終わりに
データベースが使えない案件つらい…

元記事を表示

Undefined class constant ‘MYSQL_ATTR_MAX_BUFFER_SIZE’

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/f6de7206-ec28-f702-597c-a2528b083899.png)

# mysqlnd を指定してコンパイルした場合は、この定数はサポートされていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/a1e0063e-a17c-ba9d-1491-6fe9cf77fa8d.png)

PHP Fatal error: Uncaught Error: Undefined class constant ‘MYSQL_ATTR_MAX_BUFFER_SIZE’

https://www.php.net/manual/ja/ref.pdo-mysql.php#pdo.constants.mysql-attr-max-buffer-size

mysqlnd は PHP 5.4 以降のデフォルトです。

元記事を表示

PHPの基礎① (独学エンジニア レッスン9より)

# 目標
今回やること
* PHPの基礎を学ぶ①

タスクばらし
* 変数
* 定数
* 型
* 配列
* 演算子
* 発展

# 変数
変数の誕生
メモリ領域に変数の「名前」というラベルを貼ることで、コードを読み書きしやすくした
よって、変数名には意味のわかりやすい名前をつけることが大事

変数の挙動
* リファレンス
リファレンスとは同じ変数の内容を別の名前で呼び出すこと
「変数の中身」と「変数の名前」は別に存在しているよ
変数名の前に&を付けて代入するとリファレンスが代入される
“`
$d = &$c
“`

* 代入
通常の変数への代入は「値」を渡している
`$a`の中身をコピーしてコピーしたものを`$b`に入れてる
`$a`と`$b`で変数の中身は別物なので、`$a`の値を書き換えても`$b`の値は変わらない
“`
$b = $a
“`

* 通常の変数の代入では「式」が代入されている

* 式の定義は「値があるもの全て」
変数の

Laravel + Lighthouseでお手軽GraphQLサーバー構築

## はじめに
LaravelのGraphQLフレームワーク「Lighthouse」でGraphQLサーバーを構築します。

https://github.com/nuwave/lighthouse

また、構築したGraphQLサーバーにPostmanやNext.jsのApollo Clientで実際にクエリを実行してみます。

## GraphQLとは
> GraphQL は、API のためのクエリ言語であり、既存のデータを使ってクエリを実行するためのランタイムです。
https://graphql.org/

公式で説明されているとおり、GraphQLは、APIのためのクエリ言語です。
GraphQLでは一つのエンドポイントにリクエストを送信することでデータの取得や更新を行います。

![index-diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884629/6f2201bb-213a-cc9d-903a-96054f0e6877.png)
> 画像引用:[Introdu

【PHP】配列操作で気をつけること

#### 結論! echoする前と変数配列を代入するときは、処理の前に分岐初期を入れてね
# コード
“`javascript
$waza_array = [0,3,4,5];
$waza_name = [1 => ‘田中’,2 => ‘渡部’,3 => ‘品川’,4 => ‘滝谷’,5 => ‘川原田’,6 => ‘一色’];
//↓これはダメ
$waza_list = [];
foreach($waza_array as $waza_id){
$waza_list[] = $waza_name[$waza_id];
}
//これにする
foreach($waza_array as $waza_id){
if(!empty($waza_name[$waza_id])){
$waza_list[] = $waza_name[$waza_id];
}
}
var_dump($waza_list);
“`

# 結果
“`javascript
array(3) {
[0]=>
string(6) “品川”
[1]=>
strin

技育CAMP vol9に参加してみた

# 技育CAMPとは
参加の敷居が1番低いハッカソンを目標にしている、開発期間2日のハッカソンです。
開発開始日の8日前にキックオフがあり、そこからデザイン等を考え、開発日の2日間でコードを書きまくります。
賞金等は
・最優秀賞:5万円
・優秀賞:3万円
・努力賞:5千円
・参加賞:各メンバー1千円

## 技育CAMPの良かった点
・メンターの方が質問から3分でレスポンスが来る
・質問の解決率が高い
・Slackの動きが活発
・参加するだけで1000円以上の参加賞がもらえる

## 私(私たち4人チーム)が作ったもの
私たち(チーム名:転プロ)が開発したものは **「♡のカレンダー」** です。
https://strong-toffee-42101a.netlify.app/ ←スマホ画面推奨
作品概要は、記念日を登録して管理することができ、記念日が近くなると通知もしてくれるというものです。
使用技術はVue3・PHP・MySQLです。

今回初めてVue3で開発したのですが、メンターさんのレスポンスが速かったため開発を完成までもっていくことができました。
v-if,v-for,v

Laravel インストールからプロジェクト作成まで+VSCodeの便利な拡張機能

## 概要

9か月ぶりに現場に復帰するためLaravelを使用し、基礎勉強をし直したので
基礎的なことですが備忘録として残したいと思います。
なお今回はWindowsで作業を行っているので、書いている内容はWindowsの使用を前提としています

## Laravelインストール

Laravelをインストールする前に下記をインストールする必要があります
Docker Desktop  Windows Subsystem for Linux 2(WSL2)
インストール完了後Docker Desktopを起動し下記コマンド実行

`curl -s “https://laravel.build/[ファイル名]” | bash`

プロジェクトを作成したらプロジェクトフォルダに移動して`./vendor/bin/sail up`を実行
実行したらlocalhostへアクセスできます

sailコマンドに関しては下記urlを参照いたしましたので参考までに…
(https://readouble.com/laravel/9.x/ja/sail.html)

## artisanコマンド

NextcloudのPHPバージョン変更警告

## Nextcloud 25.0.2

:::note alert
PHPバージョンを7.4系から8.2系に引き上げないでください
:::

Nextcloud 25.0.2では、セキュリティ&セットアップ警告にPHPバージョンを7.4からアップデートを推奨する旨のメッセージが表示されています。
![Screenshot 2022-12-16 105746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/d15e6389-0899-d2b2-5a0c-97f26ee4a5ac.png)

しかし、現状Nextcloud 25はPHP8.2系以上に対応していません。
アップデートするのであればPHP8.0系またはPHP8.1系にアップデートしてください。
Nextcloud 26からPHP8.2系に対応する予定になっています。

すでにPHP8.2にアップデートし、PHPのバージョンが違う旨のメッセージが表示されている場合は設定ファイルをバックアップしてPHPパッケージを再インストールしてく

Google Mapをクリックした地点の人口データの属性を持つ町丁目ポリゴンを取得し、表示する

## 概要説明
今回は、Google Mapをクリックしたときにサーバーと連携し、クリックした地点の人口データの属性を持つ町丁目ポリゴンを取得して表示させてみました。また、表示させた町丁目ポリゴンの削除についてもご紹介します。
この記事は[Maps JavaScript APIを使ってGoogle Mapに町丁目ポリゴンを表示してみる](https://qiita.com/yan_x/items/c069c8fb7c5d2648fe50)を拡張した内容になります。

## 使用したもの
– Google Map
– Maps JavaScript API

https://developers.google.com/maps/documentation/javascript?hl=ja
– JavaScript
– PHP
– 町丁目ポリゴン、令和2年国勢調査(2020年国勢調査)/人口総数
今回使用した町丁目ポリゴンおよび人口総数データは、TerraMap API からレスポンスされたものです。

https://www.mapmarketing.co.jp/terramap-api