- 投稿日:2020-09-26T22:39:18+09:00
PHP連想配列のキーとバリューを組み替える方法
DBから取ってきたデータをビューに渡す時に、中の要素でキーとバリューの組み合わせを作って新しい連想配列を作りたい場面があったのですが、色々調べてもどれもしっくりこなかったので、本記事を書いてみました。
例えば、下記のような都道府県と市区町村がセットになっているデータがあったとして、
$area_list = [ ['prefecture' => '東京都', 'city' => '新宿'], ['prefecture' => '東京都', 'city' => '渋谷'], ['prefecture' => '東京都', 'city' => '原宿'], ['prefecture' => '大阪府', 'city' => '難波'], ['prefecture' => '大阪府', 'city' => '梅田'], ['prefecture' => '大阪府', 'city' => '京橋'], ['prefecture' => '愛知県', 'city' => '名古屋'], ['prefecture' => '愛知県', 'city' => '金山'], ['prefecture' => '愛知県', 'city' => '春日部'] ];これを下記のような、都道府県がキーで、市区町村がバリューの連想配列にしたいとします。
Array ( [東京都] => Array ( [0] => 新宿 [1] => 渋谷 [2] => 原宿 ) [大阪府] => Array ( [0] => 難波 [1] => 梅田 [2] => 京橋 ) [愛知県] => Array ( [0] => 名古屋 [1] => 金山 [2] => 春日部 ) )色々PHPの配列操作について調べたり、if文書いたりしてみたんですが、試しに下記のコードを実行したところ、一発でうまくいきました。
$new_array = []; foreach ($area_list as $area) { $new_array[$area['prefecture']][] = $area['city']; }$area_listのデータの順番が都道府県順に並んでいなくても、都道府県ごとのデータになります。
蓋を開けてみれば、とても簡単な話でした。
この半年ぐらいずっとプロジェクトでコード書いていて、だいぶ慣れてきたと思ったんですが、その分何か特別な関数が必要かと疑心暗鬼になってしまい、迷子になりかけてしまいました。初心を忘れないようにします。
- 投稿日:2020-09-26T14:46:20+09:00
LaravelのFactoryで連続した日付データの挿入
Laravelのseederやらfactoryについて勉強中、連続した日付データの挿入に苦戦したので備忘録
schedule_table
id title schedule_day 1 aaa 2020-09-27 2 bbb 2020-09-28 3 ccc 2020-09-29 4 ddd 2020-09-30 5 eee 2020-10-01 ↑こんな感じで日付が連続したテストデータが欲しかった
実行するシーダーファイルを記述DatabaseSeeder.phpclass DatabaseSeeder extends Seeder { public function run() { $this->call([ UserSeeder::class, ScheduleSeeder::class ]); } }
対象のカラムはシーダーファイルから値を指定するので空文字にしておくScheduleFactory.php$factory->define(App\Models\Schedule::class, function (Faker $faker) { return [ 'title' => $faker->words, // seederファイルから上書きするので空にしておく 'schedule_day' => '', ]; });
modify('+1day')でタイムスタンプを変更しつつ、その日付をfor文で一件ずつ挿入していくScheduleSeeder.phpclass ScheduleSeeder extends Seeder { public function run() { $scheduled_date = new DateTime(); for ($i = 0; $i < 5; $i++) { factory(App\Models\Schedule::class, 1) // createに配列でカラム名、値をセットするとfactoryファイルの内容を上書きできる ->create([ 'schedule_day' => $scheduled_date->modify('+1day')->format('Y-m-d') ]); } } }
この辺、あまり参考記事がないので難しい、、
- 投稿日:2020-09-26T13:20:49+09:00
PHP Laravel 6 おすすめ映画投稿サイト作成過程 9:リレーション編
リレーションの定義
リレーション3パターン
1対1
一つのモデルが一つのモデルと関係を持つタイプです。
1対多
一つのモデルが多くのモデルを持つタイプです。
多対多
三つ以上のモデルが存在し、それぞれが関係を持つタイプです。
多対多で、タグをボタン選択式にして実装
今回のタグ付けには、多対多を使用します。
まず、recommendsテーブルとtagsテーブルを関連付けるためのrecommend_tagテーブルを作成します。$ php artisan make:migration create_recommend_tag_table次に、作成した create_recommend_tag_table を以下の内容に編集します。
recommend/database/migrations/2020_09_26_103413_create_recommend_tag_table.phppublic function up() { Schema::create('recommend_tag', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('recomend_id'); $table->unsignedBigInteger('tag_id'); }); }recommend/app/Models/Recommend.phpclass Recommend extends Model { protected $fillable = [ 'title', 'image_file_name', 'image_title', 'url', 'description', 'Impressions' ]; //リレーション public function tags() { return $this->belongsToMany(tag::class); } }recommend/app/Models/Tag.phpclass Recommend extends Model { class Tag extends Model { protected $fillable = [ 'title', ]; //リレーション public function recommend() { return $this->belongsToMany(Recommend::class); } }recommendと連帯した表示をさせるため、コントローラにtagモデルを設定します。
recommend/app/Http/Controllers/RecommendController.phpuse App\Models\Recommend; use App\Models\Tag; // use Illuminate\Http\Request; use App\Http\Requests\RecommendPostRequest;recommendコントローラーにtagを渡します。
recommend/app/Http/Controllers/RecommendController.phppublic function create() { $tags = Tag::all(); return view('recommends.create', compact('tags')); } public function edit(Recommend $recommend) { $tags = Tag::all(); return view('recommends.edit', compact('recommend', 'tags')); }recommendのeditとcreateにtagをforeachで組み込み
recommend/resources/views/recommends/create.blade.php@foreach($tags as $tag) <th> <input type="checkbox" name="tag">{{$tag->title}} </th> @endforeach
- 投稿日:2020-09-26T12:37:33+09:00
Laravelとは+導入方法
今回はphpのフレームワークの中で最もポピュラーであるLaravelという物を紹介していきたいと思います。
フレームワークとは
そもそもフレームワークとはなんだろうと思われる方もいらっしゃると思いますので、まずフレームワークの説明をしていきたいと思います。
フレームワークとは概念的な意味で言うと「枠組み」と言う意味合いをもっています。あるいは、システム開発を楽に行えるようになるプログラムや雛形のことを意味します。このフレームワークを使う事により、開発時間の短縮化、複数人で開発を行う際にコードの統一化を図ることができ、効率的に開発を進めていく事ができます。
下記はphpのフレームワークと簡単な特徴を紹介します。1.Laravel
世界で人気のフレームワーク
2020年現在、国内において主流のPHPフレームワークであり日本語のドキュメントも充実しています。2.Cakephp
日本では最も利用されてきたPHPフレームワーク
Ruby on Railsの概念を取り入れて開発されたPHPのフレームワークで、セキュリティ対策が充実しているので商用アプリケーションに最適です。3.CodeIgniter
2006年にリリースされたPHPのフレームワークで、動的なWebサイトの開発に最適です。
必要に応じて随時機能追加していくような設計となっているので、軽量で高速動作するのが特徴です。4.Symfony
2007年にリリースされたRuby on Railsの概念とMojaviの思想を取り入れたPHPのフレームワークで、大規模なWebサービスを開発するのに最適です。
5.FuelPHP
FuelPHPは2011年にリリースされた比較的新しいPHPのフレームワークで、「規約より設定」を重視して設計されているので高度なWebアプリケーションの開発に適しています。
他にもフレームワークの種類はいくつかありますので興味のある方は是非調べてみてください。
この中で今回は最もポピュラーなLaravelを紹介していきます。Laravel
LaravelはMVCモデルに基づいてます。
MVCモデルとはM(Model),V(View),C(Contoroller),の頭文字をとったものです。
下記の流れで処理が実行されていきます。以下のような流れで処理が実行されていきます。①のリクエストの後にRoutingという物も存在します。それを介してContollerに処理を繋げていきます。
導入方法
まずMAMPのhtdocsに移動していきます。
$ cd /Applications/MAMP/htdocs/ここではcomposerを使うと簡単にインストールできますので、composerを使ってインストールしていきます。composerの導入は省略します。
$ composer global require laravel/installerこちらのコマンドでインストールできます。そして、次のコマンドでLavavelでblogという新しいプロジェクトを作成できます。
$ laravel new blogまた、ターミナルでComposerのcreate-projectコマンドを実行し、Laravelをインストールする方法もあります。
$ composer create-project --prefer-dist laravel/laravel blog終わりに
今回はLaravelを導入するまでの流れを紹介しました。次回は実際にLaravelを使って、一連の流れを紹介していきたいと思います。
参考サイト
https://kredo.jp/media/php-framework/
https://futurizm.jp/articles/191
https://readouble.com/laravel/7.x/ja/installation.html
https://www.ritolab.com/entry/49
- 投稿日:2020-09-26T08:38:29+09:00
PHPUnit assertStringContainsString アサーションについて
目的
- PHPUnitのアサーションの1つであるassertStringContainsStringについてかんたんにまとめる
すみません
- 本記事は筆者の備忘録的要素が強いためメモ的な簡易的な記事となる。
- 内容が薄い場合は参考文献先などを参考に各自て補填していただければ幸いである。
assertStringContainsString
- 検査対象の中に指定された文字列が含まれているかをチェックするアサーションである。
具体例を下記に記載する。
assertStringContainsString('A', 'B');上記のようにテストコードが記載された場合、指定された文字列がAで検査対象がBとなる。
もう少しざっくりとしたコードを日本語を交えて記載する。
assertStringContainsString('検査対象に入っていることが期待されている指定された文字列', '検査対象の文字列や変数')もう少し具体的な例を下記に記載する。
$array
には連想配列が格納されており、キーと値は下記のようになっている。$array = [ 'id' => 1, 'name' => 'Hoge Hoge', ]
$array
に「Hoge Hoge」という文字列が格納されているかをassertStringContainsStringのアサーションを使ってテストする際は下記のようになる。assertStringContainsString('Hoge Hoge', $array);上記のテストコードを実行すると「テストOK」となる。
まとめ
- assertStringContainsStringアサーションは「検査対象の中に指定された文字列が含まれるか」をチェックするものである。
参考文献