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

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

laravel モデルクラスのexists()を用いてレコードが存在するか確認する

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の2022-12-02の記事です
:::

# 概要

– モデルクラスの`exist()`を用いてレコードが存在するか確認する方法をまとめる。

# 方法

– 下記の様に記載することでレコードが存在していればtrueを、存在していなければfalseを返す。

“`php
モデル::where(‘カラム名’, 値)->exists();
“`

– 例えばusersテーブルに紐づくモデルUserを用いてusers.idカラムが1のレコードが存在しているかを確認する場合下記の様に記載する。

“`php
use App\Models\User;

User::where(‘id’, 1)->exists();
“`

– レコードが存在している時はtrueが帰り、存在していない時はfalseが変える。
– ちなみにおそらく、`wh

元記事を表示

画像ジェネレーターを真似してみました(まだローカルまで)

 初めまして、TaskAraiです。最近PHPを勉強し始めて一か月、とりあえず画像ジェネレーターを作りたいと思い至りました。
 画像ジェネレーターとは、元々用意している画像の上に文字を載せるものです。イメージしているのは、下に引用しているものです。
・参考資料
## 画像ジェネレーターを作る
 さて、画像ジェネレーターを作りたい僕ですが、何も分かりません。とりあえず、「PHP 画像に文字を載せる」とググります。
 どうやら「imagettftex()」というものが良さそう。早速、下記の公式マニュアルをコピペして実行してみます。これなら、少し手を加えるだけで簡単に実現できそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984231/c4b5accb-5400-1c2d-d8cc-fdeca5d112c0.png)
引用元:【Laravel】Eloquentで多対多のリレーションを使い倒す

この記事は「[GoQSystem Advent Calendar 2022](https://qiita.com/advent-calendar/2022/goqsystem)」の2日目の記事です。

## はじめに
多対多のリレーションは「1対1」や「1対多」のリレーション([※リレーションとは](https://wa3.i-3-i.info/word11596.html))と比べて若干複雑です。というのも多対多のリレーションには「中間テーブル」という存在があるからです。

![sample.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040106/1802dcff-bee1-5212-c058-e993728b96a5.png)

まず「**多対多**」とは何か説明します(~~前置きが若干長いです~~)。
**いいから本題だ!という方は[こちら](#多対多リレーションをlaravelで扱う)からどうぞ!**

## 多対多とは
さて、そもそも多対多ってどういう関係やねんということで

元記事を表示

Vagrant + Amazon Linux2 + Laravel 9 + Apache 2.4の環境構築 2日目

# 1. 初めに
閲覧ありがとうございます。
また、1日目の記事を読んだ方は重ね重ねありがとうございます。
読んでない方はぜひ見てください!!!

# 2.概要
1日目の記事の続きになります。

1日目 : Vagrant設定、PHPインストール・設定、Laravel インストール・設定
2日目 : Apache インストール・設定、Mysql インストール・設定 **←ここ**

参考サイト :
https://qiita.com/hamburg-love/items/ae819a7abf921af77376
https://qiita.com/suzuki_web/items/2180a00a21d574bf7f55
https://terakoya.sejuku.net/question/detail/19710
https://zenn.dev/saxsir/scraps/d4815afb346582
https://ww

元記事を表示

PHP で Postgres の boolean 型を安全に扱う

## 忙しい人向けのまとめ

– PHP で Postgres のデータを取得すると、各カラムは文字列
– boolean 型を取得したときは “t” または “f”
– 普段 PHP で bool 型を扱っている時と同じように扱うには、テーブル定義に合わせて記述するクラスに boolean のカラムは含めず、マジックメソッドで別途処理するとよい

## 背景

通常、PHP で Postgres からデータを取得する際、各カラムの値が文字列で取得されます。
boolean 型のカラムは true が `”t”`、false が `”f”` で取得されます。

https://www.php.net/manual/ja/function.pg-fetch-result.php#refsect1-function.pg-fetch-result-returnvalues
> 論理型の値は “t” あるいは “f” の形式で返します。 配列を含むそれ以外の型は、PostgreSQL のやりかたにしたがって文字列として フォーマットされた形式で返します。

この仕様をあらかじめ把握していない

元記事を表示

DockerでLAMP環境(Amazon Linux 2/Apache/MySQL/PHP8.1(Laravel9))を構築する手順 ②Apacheの導入(全8回)

# はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、構築する手順についてアウトプットします。

![スクリーンショット 2022-11-30 23.31.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/930bcd24-38e9-316e-bebd-cef83aea5924.png)

全 8 回を予定しています。

[① 作成する環境の確認](https://qiita.com/ryamate/items/47183e1ffd4843ef18fa)
**② Apache の導入**
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成(MySQL の導入)
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加

今回は、 **② Apache の導入**

元記事を表示

まさかEloquentモデルのインスタンスを更新したい為に再度findしてないだろうな

## 概要

“`php
$hoge = Hoge::find($hogeId);
$hoge->save();
$hoge->hugahuga()->create($hugaField);
// ….その後も処理が続き
“`

hugahuga取り出したいから新しい状態にしとくか
“`php
$hoge = Hoge::find($hogeId);
$hoge->hugahuga
“`

まてまて、“refresh()“を使えよ
![](https://storage.googleapis.com/zenn-user-upload/748fee7a02b2-20221127.png)

“`php
$hoge = Hoge::find($hogeId);
$hoge->save();
$hoge->hugahuga()->create($hugaField);
$hoge->refresh();
$hoge->hugahuga;
“`

こう。

元記事を表示

ローカルスコープ使うのやめませんか?

[Laravel Advent Calendar 2022](https://qiita.com/advent-calendar/2022/laravel) 2日目の投稿です
# ローカルスコープについて
まずローカルスコープとは?
>アプリケーション全体で簡単に再利用できる、共通のクエリ制約を定義できます。たとえば、「人気がある(popular)」と思われるすべてのユーザーを頻繁に取得する必要があるとしましょう。スコープを定義するには、Eloquentモデルメソッドの前にscopeを付けます。

[readouble引用](https://readouble.com/laravel/9.x/ja/eloquent.html)

以前にもローカルスコープについて[記事](https://qiita.com/ryocha12/items/1b75e4d5b8df727937f3)を書いています。
具体的にはこんなやつです
“`php:User.php
class User extends Model
{
public function scopePopular($query)

元記事を表示

URLに合わせて動作するプログラムを選ぶ、”Routing”

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

## 最初に
[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のコンポーネントは、Sy

元記事を表示

PHPで理解する単一責任の原則

初投稿です、よろしくお願いします。
勉強しながらの記事作成なので、間違っている部分や説明不足な点があれば詰めて頂けるとありがたいです。

# はじめに

最近設計に関する勉強をしていて、[単一責任の原則(Single responsibility principle)について、もう一度考える](https://www.ogis-ri.co.jp/otc/hiroba/others/OOcolumn/single-responsibility-principle.html)という記事と、[PHPで考える単一責任の原則](https://shkn.hatenablog.com/entry/2019/04/06/025055)という記事がとても勉強になったので、アウトプットのためにPHPのコードで自分なりに説明してみました。

# 単一責任の原則
### 要約
– 1クラスの責任は1アクター(利用者)まで

### メリット
– 変更に強くなる
– 理解しやすいコードが書ける
– コンフリクトを回避できる

# 説明
## 前提知識
#### アクター
システムの利用者。人や組織、外部シス

元記事を表示

CUIでPHPアプリケーションをつくる


エンジニアYoutuberの山浦清透さんが運営する独学エンジニアの「レッスン4: 読書ログサービスを作ろう②テキスト版」を学習したので、そのアウトプットを実施する。
レッスン4では、以下がタスクとタスクばらしである。

<タスク>

テキスト版(CUI)のアプリケーションを作成する

<タスクばらし>
* 読書ログを表示する
* 読書ログを登録する
* メニュー化し、アプリケーションとして動作する
* 複数の読書ログを表示

# 読書ログを表示する
表示するデータ
* 書籍名
* 著者名
* 読書状況
* 評価(5点満点の整数)
* 感想

プログラムを書く際のポイントは1つ処理を書いたら、動作確認を実施すること。
ソースコード
“`php:qiita.php

元記事を表示

DoctrineとEloquent比較大全2: レコードの追加

day2の今日は、day1で定義したレコードを表すクラス(Entity, Model)を使って、Doctrine・Eloquentそれぞれのレコードを1件追加(登録, insert)する方法を見ていきます。

## Doctrine

“`php
setTitle(‘ちょうぜつソフトウェア設計入門’);

/** @var EntityManagerInterface $entityManager */
$entityManager = require __DIR__.’/bootstrap.php’;
$entityManager->persist($newBook);
$entityManager->flush();
“`

元記事を表示

酷すぎる自分のSQL(Laravel query builder)を掃除した話

Laravelのクエリビルダを使ってデータを取得する際のアプローチが力技もいいところでしたので、修正していった過程を投稿します。

`Laravel version 8.83.26`
`MySQL version 8.0.31`

### やりたいこと
**下記のロジックを成立させるクエリを作成したい**
– ユーザーがログイン時にPOPUPを表示
– POPUPは管理画面から登録可能
– ユーザーはPOPUPを見た時「次回から非表示」を選択できる
– 「次回から非表示」をしたPOPUPは除外して表示

### 元々の実装案
3つのテーブルをJOINさせて表示させようとしていた。
– POPUP内容を登録するテーブル(`notifications`)
– ユーザーテーブル(`users`)
– 「次回非表示」を選択したユーザを登録する中間テーブル(`notificatoin_user`)
※中間テーブルは[Laravelの命名規則](https://readouble.com/laravel/8.x/ja/eloquent-relationships.html)に従って命名

###

元記事を表示

【Laravel】view()とredirect()の使い分け

現在独学でLaravelを使用し、簡単な掲示板を作成しています。
掲示板を作成していくなかで、view()とredirect()の使い分けについて紛らわしいなと感じたので,備忘を兼ねて記事を投稿させていただきます。

## そもそもview()とredirect()ってなに?
フロントの画面からフォームでデータが送信されたときに
LaravelではコントローラーでPOSTやGETのリクエストを受け取り、データの保存やリストの取得などの処理をします。
その処理の後、view側に処理したデータを渡す際に使うのがview()とredirect()です。

## view()について

サンプルコード↓↓
~~~
return view(‘home’, compact(‘comments’));
~~~

**ものすごく簡素化していうとGETの時はview()を使う!!以上!!!笑**
もう少し丁寧に説明すると
まず上記のサンプルコードの記載の
第一引数の **’home’** は、viewのファイル名を記載しています。
そして、第二引数の **compact(‘comments’)**

元記事を表示

【激推し越えて好きぴ】Laravel LivewireとAlpine.jsとは?

::: note warn
初学者の方にも読みやすいようにかなり抽象的な内容となってます。
以降の記事から徐々に具体的な内容に踏み込んでいきます!!
:::

# 動的な機能を実装できるライブラリです
「動的」というのは画面がホイホイ切り替わる感じのアレです。ブラウザでリロードしなくてもデータ更新できたりボタン押したらメニューがにょきっと出てくる感じのダイナミックなやつです。

# LivewireとAlpine.jsってどんなのですか
### まとめたンゴ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1311883/d70e1a1c-bcc4-8643-e3b9-ace3af9bd098.png)

 ↑ 書き方や言葉の表現がちょっと回りくどい。

::: note warn
学習コストは「動くものがある程度自由に作れる」ようになるまでの学習コストを指してます。
言い換えれば「アンチパターンの理解とかは考慮せず、一通り動くものを作れるようになるまで」ってことです。
:::

# Li

元記事を表示

さくらのオブジェクトストレージにAPIリクエストする

さくらのオブジェクトストレージに画像を格納する機会があり、WebAPIとかで簡単にアップロードできるんだろうなと思っていたらめちゃくちゃ苦戦したので、忘れないうちに動くソースを記事に残しておきます。

さくらのオブジェクトストレージは、Amazon S3互換APIで提供されているとのことで、通常ならAmazon S3をサポートするクライアント導入すればそのまま動くんだと思います。

自分の場合、AWS関連の知識が皆無だったのと、今回は画像アップロードしか使わないつもりだったので、そのためにS3クライアントについて調べたりするより、一個リクエスト投げる処理書いちゃったほうが速いのでは?と思ってCurlで書くことにしました。

多分それが、急がばなんとやらでした。

まずS3互換APIって言うけどS3 APIのドキュメントどこにあるの??ってところから躓く。。

結局見つけられなかったので、同じことをやろうとしている人の記事をかろうじていくつか見つけ、参考にリクエスト組み立ててみることに。

リクエスト内容に署名してヘッダに添付するタイプのAPIなのですが、これを自分で組み立てるのが中々難

元記事を表示

laravel ルートネームに紐づくルーティング情報があるか判定する

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の2022-12-01の記事です
:::

# 概要

– ルートネームに紐づくルーティング情報が存在するかを確認する方法をまとめる。

# 方法

– `Route::has()`を用いる。
– 下記の様に記載するで紐づくルーティング情報が存在すればtrueを、存在しない場合falseを返す。

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

Route::has(‘ルートネーム’)
“`

– ルートネームに紐づくルーティング情報がなかった時にエラーを投げるような処理に使える。

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

if (!Route::has(‘ルートネーム’)) {
//エラー投げる処理
}

元記事を表示

【初心者向け】PHPの環境構築手順

# はじめに

今回の記事では、これからPHPで学習を始めるという方向けに

PHPの環境構築について分かりやすく解説していきたいと思います!

# 1. PHP(復習)

環境構築を進める前に、PHPについて簡単にまとめてみましたので復習がてらにご確認ください。

:::note info
**PHPの特徴**
・動的なWebサイト開発ができるプログラミング言語の1つ
・Javascriptはクライアントサイド(ブラウザ)の言語で、PHPはサーバーサイド(プログラム中)の言語
・HTMLに組み込んで使える
・データベースとの相性も良い
・WordPress、Facebook、Yahoo!、ぐるなび等はPHPで開発されている
:::

エディタはVSCODEを使用していきます。
# 2. 環境構築

環境構築とは、その言葉の通りサービスを開発する環境を整えることです。
プログラミングにおける環境構築には、「実行環境」と開発環境」の2種類があります。
「実行環境」とは、プログラムやソフトウェアが稼働するために必要な環境のことで、「開発環境」とは、
システム開発をする為に必要な環境のことで

元記事を表示

Migrate deployer from 6.x to 7.x

homebrewで入れてたdeployerを 6.x->7.xにアップデートしてしまい設定ファイルを変更するはめになった。

[https://deployer.org/docs/7.x/UPGRADE](https://deployer.org/docs/7.x/UPGRADE)を参考にする

“`
– ->user(‘xxxxxxxx’)
– ->port(10000)
– ->identityFile(‘~/.ssh/id_rsa’)
– ->forwardAgent(true)
+ ->set(‘remote_user’, ‘xxxxxxxx’)
+ ->set(‘port’, 10000)
+ ->set(‘identity_file’, ‘~/.ssh/id_rsa’)
+ ->set(‘forward_agent’, true)
“`

IdentityFileはサーバ側でcloneするときの鍵の設定で、デフォルトで`.ssh/config`を見るようなのでそっちに書いといてもよかったかも。

そして実行。

“`

元記事を表示

Ubuntu 22.04 + Nginx 1.22.1 + MariaDB – PHPインストール

## 前提
WordPress をインストールするにあたり、MariaDB と PHP をインストールします。
前回の記事で MariaDB のインストールを完了したので、この記事では、PHP のインストールを行います。
## 環境
Ubuntu 22.04
Nginx 1.22.1
MariaDB 10.6.11
PHP 8.1
## 設定
WordPress に必要な PHP をインストールしていく。記事によってインストールしているモジュールがちがってよくわからない。まずは Ubuntu にインストールできる PHP のパッケージを確認してみる。
“`
$ sudo apt-cache search php
“`
めちゃめちゃ出力されるだけでよくわからない。いろいろ読み漁ると、WordPress の本家サイトを確認するとよいとわかる。そりゃそうだ。
参考)

Server Environment

とりあえず、PHP をインストールしよか。