実現したいこと
PHPで登録したレシピを一覧表示するシステムを作っています。
DBに登録した材料(Integer型)をblade上に文字列で表示しなおす処理を実現したいです。
アドバイスをいただけると幸いです。
よろしくお願いいたします。
前提
値/材料名
1 => 'たまねぎ',
2 => 'にんじん',
4 => 'たまご',
8 => 'きゃべつ',
が材料の変換データです。
登録済のDBに'1'が登録されていたら「たまねぎ」を、
'3'が登録されていたら「たまねぎ、にんじん」、
'7'が登録されていたら「たまねぎ、にんじん、たまご」
のように、値の合計に該当する材料の文字列をblade上に出力したいです。
該当のソースコード
RecipesController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7use App\Recipe; 8 9class RecipesController extends Controller 10{ 11 /** 12 * index()のみ記載 13 */ 14 15 public function index() 16 { 17 $recipes = Recipe::all(); 18 $ingredients = new Ingredients($recipes); 19 20 return view('recipes.index', [ 21 'recipes' => $recipes, 22 'ingredients' => $ingredients, //材料クラスのインスタンスを渡す 23 ]); 24 } 25
php
1<?php 2 3namespace App; 4 5 //材料の文字列変換をさせるための配列定数(定義の仕方に誤りがあればすいません) 6 define('INGREDIENTS', [ 7 1 => 'たまねぎ', 8 2 => 'にんじん', 9 4 => 'たまご', 10 8 => 'きゃべつ', 11 ]); 12 13//材料クラス 14class Ingredients 15{ 16 public $id;//レシピテーブルに登録されているID 17 public $ingredients;////レシピテーブルに登録されている材料(integer型) 18 19 //コンストラクタ 20 function __construct($recipes) 21 { 22 23 foreach($recipes as $recipe){ 24 $this->id = $recipe->$id; 25 $this->ingredients = $recipe->$ingredients;//ここを数字から文字列に変換させたい 26 } 27 } 28 29 function getAllRecipes()//ここでコントローラーにすべてのレシピデータを渡したい 30 { 31 32 foreach($recipes as $recipe){ 33 return $this->$recipe; 34 } 35 36 } 37} 38 39
index.blade.php
php
1@foreach($recipes as $recipe) 2 @if(count($recipes) > 0) 3 <p>{{ $recipe->id}}</p>//レシピID 4 <p>{{ $recipe->ingredients</p>//最終的に材料の文字列を表示させたい(3であれば「たまねぎ、にんじん」と表示させたい) 5 @endif 6@endforeach
試したこと
配列定数の定義の仕方は
https://www.php.net/manual/ja/language.constants.syntax.php
を参考にさせていただきました。
補足情報(FW/ツールのバージョンなど)
php 7.2.22
Laravel 5.5
回答2件
あなたの回答
tips
プレビュー