Laravel PHP 三項演算子の戻り値部分の記載で苦労した


目的

  • Laravelのbladeファイルの記載で三項演算子を用いて「文字列+DBのデータ」を表示分岐していたところ非常に苦労したのでメモとしてまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 8.6.0 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

問題箇所

  • 下記のように記載し三項演算子の真の部分にデータを入れ込みたかった。

    @inject('ContentService', 'App\Services\ContentsService')
    <p>{{真偽判断の式 !== 0 ? 'コンテンツの数は{{$ContentService->getContent(Auth::id())}}件です' : 'コンテンツはありません'}}</p>
    
  • 簡単に解説すると「真偽判断の式」が真のときのみp要素で「コンテンツの数は〇〇件です」(〇〇はDBから認証中ユーザIDを引数に取得したデータ)のように表示したかった。

  • 中括弧が不足している旨のエラーが出て当該ページを表示する事ができなかった。

原因

  • 単純明快な原因である。文字列連結がうまくできていないだけだった。
  • 本来PHPで文字列を連結するときは下記のように.を使用する。

    //「おはようございます」と出力される
    echo 'おはよう' . 'ございます'
    
  • エラーが出た箇所は下記の部分である。

    'コンテンツの数は{{$ContentService->getContent(Auth::id())}}件です'
    
  • 落ち着いて見るとエラーが出るのは当たり前である。文字列部分とデータ部分の連結部分似誤りがある。正しく記載すると下記のようになる。

    'コンテンツの数は' . $ContentService->getContent(Auth::id()) . '件です'
    
  • 上記の内容を踏まえてp要素部分を正しく記載する。

    @inject('ContentService', 'App\Services\ContentsService')
    <p>{{真偽判断の式 !== 0 ? 'コンテンツの数は' . $ContentService->getContent(Auth::id()) . '件です' : 'コンテンツはありません'}}</p>