PHP関連のことを調べてみた2021年08月03日

PHP関連のことを調べてみた2021年08月03日
目次

ランダムで特定のユーザーにかつカラムの値だけを表示(Laravel)

プログラミング初心者です。

##やりたい事
特定のユーザーのWord Modelの値をランダムに取得したい。
##まずはWord Modelの値を取得するにはとやってみた事
調べるとinRandomOrder()使うと出てきたので、まずこのコードを書いてみました。

“`
$word_random = Word::inRandomOrder()->first();
“`
first()はひとつだけ取得し、返り値はインスタンスです。

でもこれだと、WordModelを全て取得してしまいます
wordカラムのだけ表示したいので、カラム指定できるselect()を使いました

“`
$word_random = Word::inRandomOrder()->select(‘word’)->first();
“`
そして表示したいところに

“`
$word_random[“word”]
“`
[“word”]は連想配列で、ないと、{word:word1}と波括弧とカラム名まで出てきてしまいます
wordがkeyになっているので指定してあげます。

ただModelの値をランダム

元記事を表示

【初学者必見】LaravelのN+1問題とは、その解決方法

##はじめに
**Laravel: 7.30.4**
**PHP: 7.2.3**

N+1問題についてなぜこの問題が発生するのか、初学者が簡単に理解できるように書いていきたいと思います。

##準備
まず、適当にリレーションを張ったモデルを用意します。今回は`Author`(著者)モデルと`Article`(記事)モデルを用意して、`Author`が複数の`Article`を持つようにします。

“`php:Article.php
belongsTo(‘App\Author’);
}
}
“`
※Authorモデルには特になにも書かなくて大丈夫です。

次にテーブルを用意して適当にデータを挿入していきましょう

テーブル作成はこちら↓のURLが参考になります。
https:/

元記事を表示

Laravel ロールの設定

Laravelでロールを設定する方法についてご紹介します。
今回はuserテーブルにロールカラムを追加する方法と、ユーザーへの役割の設定方法までを記載致します。
現在作成中のポートフォリオで、ログインをロールで認可してユーザー権限ごとにログイン後のリダレクト先を変更する機能を実装中なので、実装が終わったらそちらの方もご紹介できればと思います!

##ロールとは
システム開発において`ロール`とは`役割`という意味ですが、一般的に権限といった言葉で表現されています。
userアカウントを作成した際に、ロールが設定してあることで、このアカウントは`一般ユーザーなのか、管理者なのか`といったアカウントの役割を区別することが可能になります!

ロールの設定をすれば、ログインした際にロールからアカウントの権限を区別し、一般ユーザーや管理者ごとにブラウザの表示内容を変えることができます!

##ロール設定の前に
今回は下記の権限を想定の上で、数値を使ったロールの設定を行います。
数値以外には、文字列でも設定可能です。

「管理者(admin)」
・アプリを管理する用のアカウント。主に、登録してある

元記事を表示

Laravelの使える?ヘルパ関数

## Laravel8のヘルパ関数で実際に使った使えたものをまとめる
Laravelではグローバルに使える関数が多数あり、それらを使用することにより開発効率や可読性が向上します。
そのため用途にあったものがある場合、積極的に使用するようにしましょう。
以下では用途にまとめてヘルパ関数を記載しています。

## パス
### `mix()`
`mix`関数は、バージョンつけしたMixファイルのパスを取得します。

“`php
$path = mix(‘css/app.css’);
“`

### `storage_path()`

`storage_path`関数は、アプリケーションの`storage`ディレクトリへの完全修飾パスを返します。`storage_path`関数を使用して、ストレージディレクトリ内の特定のファイルへの完全修飾パスを生成することもできます。

“`php
$path = storage_path();

$path = storage_path(‘app/file.txt’);
“`

## 文字列
### `Str::lower()`
`Str::lo

元記事を表示

プログラミング初心者が書いたマイグレーションのやり方について

はじめに
—-

現在Laravelを学習しているプログラミング初心者の僕が
今回はマイグレーションのやり方について記載していきたいと思います。

マイグレーションとは?
—-

マイグレーションとはデータベースのバージョン管理機能のことを指します。
PHPのスクリプトを使うことによりテーブルの作成処理などを用意することが出来るのです。

マイグレーションの手順としては以下のようになります。

+ マイグレーションファイルの作成
+ スクリプトの記述
+ マイグレーションの実行

マイグレーションファイルの作成~実行まで
—–

現在作成しているプロジェクトに移動してから以下のコマンドを実行します。
(僕は今回peopleというファイルを作ります)

“`
$ php artisan make:migration cretate_people_table
“`

するとdatabaseフォルダのmigrationsフォルダの中に
xxxxx_create_people_table.phpというファイルが新たに作られていると思います。
(xxxxxには作成した日時が書い

元記事を表示

【Laravel】package不足でcomposer installができない

既存のLaravelプロジェクトをインストールする工程で、composer installをしますが、

“`
[ec2-user@ip-172-31-39-229 laravel]$ composer install
PHP Warning: PHP Startup: Unable to load dynamic library ‘pdo’ (tried: /opt/remi/php74/root/usr/lib64/php/modules/pdo (/opt/remi/php74/root/usr/lib64/php/modules/pdo: cannot open shared object file: No such file or directory), /opt/remi/php74/root/usr/lib64/php/modules/pdo.so (/opt/remi/php74/root/usr/lib64/php/modules/pdo.so: cannot open shared object file: No such file or directory))

元記事を表示

【PHP】配列同士を結合する。配列にカラムを追加する

“`PHP
[ ‘id’ => 10, ‘language’ => ‘PHP’, ‘framework’ => ‘Laravel’],
1 => [ ‘id’ => 20, ‘language’ => ‘Java’, ‘framework’ => ‘Spring’],
2 => [ ‘id’ => 30, ‘language’ => ‘JavaScript’, ‘framework’ => ‘Vue.js’ ],
3 => [ ‘id’ => 40, ‘language’ => ‘Ruby’, ‘framework’ => ‘Ruby on Rails’ ]
];

$add = [
0 => [ ‘id’ => 10, ‘age’ => ‘1995年06月08日’ ],
1 => [ ‘id’ => 20, ‘age’ => ‘2009年05月23日’ ],
2 => [ ‘id’ => 30, ‘age’ => ‘

元記事を表示

LaravelでArtisanコマンド(コマンドライン(Command))処理のテストを書く

### 経緯
・ Laravelにて、バッチ処理を書くにあたって、Commandで実装してgithub actionsで定期実行する形にしようと考えてバッチ処理実装
・ テスト書いてないとかお前それ t_wadaの前でも。。。があるので、テストももちろん書く!
・ マニュアルにあるように
https://readouble.com/laravel/8.x/ja/console-tests.html

“`php
$this->artisan(‘testBatch’)
->expectsOutput(‘batch complete’)
->assertExitCode(0);
“`
と書く。

・ おーいけてるいけてる。じゃあDBの値の変更結果も確認しよう。

“`php
$this->artisan(‘testBatch’)
->expectsOutput(‘batch complete’)
->assertExitCode(0);

$this->assertEquals(Hoge::count(), 1);
“`

“`
FAILU

元記事を表示

【Laravel】Routingがあっているはずなのに404となった場合の対処法

# 概要
ブランチ等を切り替えているうちに、Routing登録済みのページで404となる現象が発生したためその時の対処法を記録

## 開発環境
Docker
PHP 8.0.8
Laravel 8.32.1

## 対処法

正しいroutingが登録されていない可能性があるため、下記の手順で確認&修正します。

– 1.   登録されているroutingを確認

“`
php artisan route:list
“`

– 2. 404が出るページのrouting登録が1のリストで表示されない(または正しいものでない)場合、cacheを削除

“`
php artisan route:clear
“`

– 3. 再度1のコマンドを打ち、正しいroutingとなったことを確認して該当ページの表示確認を実施

元記事を表示

久々にLaravelを触ったら、コンテナやフロントエンド開発が簡単になっていた

最近、ちょっと時間ができたのでキャッチアップのために `Laravel8`を触ってみました。
知識が`Laravel5`前後で止まっていたので、進化したエコシステムに驚いたので書き記しておきます。
**ちなみに、次のLTSは`Laravel9`(2022/1/25リリース予定)になるので、この手の機能をプロダクションで使うときは、しかるべき時にアップデートをしましょう。**

## コンテナを使っての開発環境構築が楽になってる!(Laravel Sail)
ちょっと前まではコンテナで`Laravel`を動かす時には自分で適当な`DockerFile`を書くか、`Laradoc`使って構築するケースが多かったと思います。
`Laradock`は大きくなりすぎて余計な機能もあったりしたので、私は自前でDockerFileを書く派でした。これだけでも、ちょっと「面倒くさいな。。。」なんて思っていました。
ここで`Laravel Sail`の登場です。
`Sail`を使っての環境構築は、

“`sh
$ curl -s “https://laravel.build/[ディレクトリ名]” |

元記事を表示

Laravelでログイン機能を入れる

# 1 アプリのバックアップをしておく
# 2 認証機能をインストールする
### 1 Laravel/ulパッケージをインストールする
“`php:ターミナル
アプリ$composer require laravel/ui
“`
### 2 パッケージを用いて認証機能を追加する
“`php:ターミナル
アプリ$php artisan ui vue –auth
“`
“`php:ターミナル(結果)
アプリ$do you want~
“`
*ここはyesにする!

#3.CSSを適用させる

“`php:ターミナル
アプリ$npm run dev
“`

→完成!

元記事を表示

TravisCIでLaravel用パッケージを複数のLaravelバージョンで自動テストする

# 概要
Testing Laravel Package Against Multiple Laravel Versions.
Laravel用のパッケージを開発する際に、Travisを利用して複数のLaravelバージョンでテストを回すための設定ファイル.travis.yml について。

(検索のワードが良くないのか、イマイチ日本語の情報が出てこなかったので残しておく。)

## 主要な目的
– Laravel用パッケージに対する自動テストをTravisで回す ※Laravel本体を使ったアプリケーションのテストではなく、パッケージのテストである点に注意
– php、Laravelの各バージョンを組み合わせてのテストを回す ※本稿ではPHP7.2~7.4、Laravel6~8を対象とする

## 結論
“`yaml
language: php
matrix:
include:
– php: ‘7.2’
env: ‘ORCHESTRA_VERSION=4.*’
– php: ‘7.2’
env: ‘ORCHESTRA_VER

元記事を表示

Could not open input file: composer.pharが出た場合の対処方法

macでcomposerインストール後にCakePHPのプロジェクトを作成しようとしてつまずいたのでメモ

“`
php composer.phar create-project –prefer-dist cakephp/app:4.* my_app_name
“`

を実行した場合に

“`
Could not open input file: composer.phar
“`

と表示されることがあります。
その場合は以下でプロジェクトを作成してみてください。

“`
composer create-project –prefer-dist cakephp/app:4.* my_app_name
“`

元記事を表示

PHP endroid / qr-codeを用いて、QRコードを表示

#はじめに
PHPライブラリである`endroid/qr-code`を用いて、webページに任意のQRコードを表示します。
https://github.com/endroid/qr-code

環境は、Mac、VSCodeです。

#流れ
①composerをインストール
②QRコードを表示
③html内の一部としてQRコードを表示する
④qr-code関連をqrcode.phpにまとめる

# composerをインストール
[こちらを参考](https://getcomposer.org/download/
)に下記のコマンドを入力します。下記は2021年8月時点での最新版のコマンド。

“`
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e

元記事を表示

【Laravel】よく使うリダイレクトのやり方2種類

>**HTTPリダイレクト**

>リダイレクトレスポンスは、Illuminate\Http\RedirectResponseクラスのインスタンスで、ユーザーを他のURLへリダイレクトするために必要なしっかりとしたヘッダを含んでいる必要があります。RedirectResponseインスタンスを生成する方法はいくつかあります。

引用:[HTTPリダイレクト
](https://readouble.com/laravel/6.x/ja/redirects.html?header=%25E3%2583%25AA%25E3%2583%2580%25E3%2582%25A4%25E3%2583%25AC%25E3%2582%25AF%25E3%2583%2588%25E3%2581%25AE%25E4%25BD%259C%25E6%2588%2590)

#結論
通常のリダイレクト:`redirect`ヘルパを使用する
前のページに戻るリダイレクト:`back`ヘルパを使用する

#1. redirectヘルパを使用する
Laravelでは`redirect`ヘルパ関数がグローバルに定義され

元記事を表示

rectorphp/rector deep dive ~PHPStanと併用しプロダクションのPHPアプリケーションを大規模リファクタリングする方法~

一般的なサービスでは、DI やフレームワークを使用していると思います。その場合、デフォルトの設定でRector を入れただけではコードの追跡が不完全で、期待通りにリファクタリングできません。しかし PHPStanと併用し設定をしっかり記述すれば、力を最大限引き出せます。

弁護士ドットコムでは、Yii1 のプロダクションコードに PHP 7.4 Typed Properties のルールを適用し、530 のクラス変数に型を付けました。その過程で調べたことをまとめました。

またLaravelを例にどのような設定が必要か紹介します。~~(Yii1は需要ないと思うので)~~

# 3 文まとめ

– Rector を使えば、とても簡単に PHP コードを自動リファクタリングできる
– Rector は内部で PHPStan を利用している
– 依存関係の複雑なプロジェクトでも、PHPStan の設定を読み込ませれば Rector で綺麗にリファクタリングできる

# Rectorとは?

https://github.com/rectorphp/rector

> Rector insta

元記事を表示

PHP で Zip ファイルをテンポラリディレクトリに展開する

## 概要
PHP で Zip ファイルをテンポラリディレクトリに展開して中身のファイルをごにょごにょするのが地味にめんどくさかったのでメモがてらまとめました。

## テンポラリディレクトリに展開先を用意する
Zip ファイルの展開先として一時的なディレクトリを使用したかったため`sys_get_temp_dir`メソッドを使いました。
`/tmp`など OS が指定する一時的なファイルの置き場所へのパスを取得することができます。
加えて`uniqid`メソッドで取得する一意な値をディレクトリ名とするようにしてみました。

“`php
$tmpDir = sys_get_temp_dir() . ‘/’ . uniqid();
mkdir($tmpDir); // ディレクトリを作成します
“`

このようにテンポラリディレクトリに展開するようにしておけば、展開後に処理が落ちてしまい削除が漏れしてしまった場合でも後で迷いなく削除することができます。
※OS によっては一定期間経つとテンポラリディレクトリのファイルが削除される設定になっているものもあるようです

## Zip フ

元記事を表示

2つの配列を1つのforeach処理でDBに格納する方法

#やりたかったこと
####WordテーブルとNoteテーブルのカラムにformから送られてきた値を格納。

Noteテーブルのカラム
・user_id
・title

Wordテーブルのカラム
・note_id
・question 
・answer

create.blade.php

“`

@csrf

タイトル

     //name = ‘question’だと最後の1個のデータしか渡せないがname=’question[]’とすることで配列にして全部の値をコントローラーに渡すことができる

Q.

A.

Q.CakePHP4_migrationでdatetimeカラムが追加できない

#まえがき
CakePHPのmigrationを利用した際に発生したエラーの対処法となります。

#バージョン
CakePHP4

#手順
・Usersテーブルにmigrationでcreatedカラムを追加する

“`php:20210801024646_ChangeUsers.php
public function change()
{
$table = $this->table(‘users’);
$table->addColumn(‘created’, ‘datetime’);
$table->update();
}
“`

※上記のmigrationファイルでmigrate実行するとエラーが発生
`bin\cake migrations migrate`

“`
PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: ‘0000-00-00 00:00:00’ for colu

元記事を表示

CakePHP4_migrationでカラム位置を変更したい

#まえがき
CakePHPのmigrationを利用してカラム位置の修正を行う手順を記載します。

#バージョン
CakePHP4

#手順
・Usersテーブルをmigrationで作成
`bin\cake bake migration CreateUsers login_id:string `
`bin\cake migrations migrate`

・Usersテーブル情報修正用のmigrationファイル生成
`bin\cake bake migration ChangeUsers`

“`php:20210801024646_ChangeUsers.php
$table = $this->table(‘users’);
$table->addColumn(‘loginId’, ‘string’, [
‘after’ => ‘id’
]);
$table->update();
“`

※上記のmigrationファイルでmigrate実行するとエラーが発生
`bin\cake migrations migrate`

“`
PDOException: S

元記事を表示

OTHERカテゴリの最新記事