質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2589閲覧

Laravel; @if (isset($var)), @if (empty($var))等がなぜか効かない

Reikirin

総合スコア23

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/03/09 11:17

LaravelのversionとしてはLaravel Framework 8.27.0を使っています。

Userとしてログインし、情報を入力して、それをBoardに保存して、検索によって、そのBoardの情報を取り出すことができる様なアプリを作ろうとしております。

Boardモデルの新規保存(add/create)の機能を実装しようと思っておりますが、UserとリレーションのあるBoard情報の有無によって表示する内容を変えたいと思い、add.blade.phpに@ifによる場合分けを用意しましたが、なぜか$boardが空配列の時も@else以下を表示してしまいます。
なぜでしょうか?
わかる方がいらっしゃれば教えていただきたいです。
(ちなみに、$boardはnullではないです。@if (is_array($board) && !$board)も試しましたが、ダメでした。。。)

View↓
(add.blade.phpの@section('content')ディレクティブ)

add

1@section('content') 2 @if (empty($board)) 3 <div class="container"> 4 <table> 5 <form action="/board/add" method="post"> 6 {{ csrf_field() }} 7 <input type="hidden" name="id"> 8 <div class="a_form"> 9 <label>info_1 : </label> 10 <input type="text" name="info_1"> 11 </div> 12 <div class="a_form"> 13 <label>info_2 : </label> 14 <input type="text" name="info_2"> 15 </div> 16 <div class="a_form"> 17 <label>info_3 : </label> 18 <input type="text" name="info_3"> 19 </div> 20 <div class="a_form"> 21 <label>info_4 : </label> 22 <input type="text" name="info_4"> 23 </div> 24 <div class="a_form"> 25 <label>info_5 : </label> 26 <input type="text" name="info_5"> 27 </div> 28 <div class="a_form"> 29 <input type="submit" value="送信する"> 30 </div> 31 </form> 32 </table> 33 </div> 34 @else 35 <div class="container"> 36 <a class="button" href="/board/edit">入力情報を修正する</a> 37 <a class="button" href="/board/del">入力情報を削除する</a> 38 </div> 39 @endif 40@endsection

Controller↓

BoardController

1<?php 2 3namespace App\Http\Controllers; 4 5use App\Models\Board; 6use App\Models\User; 7use Illuminate\Http\Request; 8use Illuminate\Support\Facades\Auth; 9 10class BoardController extends Controller 11{ 12 public function add(Request $request) 13 { 14 $user = Auth::user(); 15 $board = Board::with('user')->get(Auth::id()); 16 $param = ['user' => $user, 'board' => $board]; 17 return view('board/add', $param); 18 } 19 20 public function create(Request $request) 21 { 22 $this->validate($request, Board::$rules); 23 $board = new Board; 24 $board->user_id = Auth::id(); 25 $form = $request->all(); 26 unset($form['_token']); 27 $board->fill($form)->save(); 28 return redirect('/board'); 29 }

Models↓

User

1<?php 2 3namespace App\Models; 4 5use Illuminate\Contracts\Auth\MustVerifyEmail; 6use Illuminate\Database\Eloquent\Factories\HasFactory; 7use Illuminate\Foundation\Auth\User as Authenticatable; 8use Illuminate\Notifications\Notifiable; 9 10class User extends Authenticatable 11{ 12 use HasFactory, Notifiable; 13 14 /** 15 * The attributes that are mass assignable. 16 * 17 * @var array 18 */ 19 protected $fillable = [ 20 'name', 'email', 'password', 21 ]; 22 23 /** 24 * The attributes that should be hidden for arrays. 25 * 26 * @var array 27 */ 28 protected $hidden = [ 29 'password', 'remember_token', 30 ]; 31 32 /** 33 * The attributes that should be cast to native types. 34 * 35 * @var array 36 */ 37 protected $casts = [ 38 'email_verified_at' => 'datetime', 39 ]; 40 41 protected $guarded = array('id'); 42 43 public function boards() 44 { 45 return $this->hasMany('App\Models\Board'); 46 } 47}

Board

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Board extends Model 9{ 10 protected $guarded = array('id'); 11 12 public static $rules = array( 13 'info_1' => 'required', 14 'info_2' => 'required', 15 'info_3' => 'required', 16 'info_4' => 'required', 17 'info_5' => 'required', 18 ); 19 20 public function user() 21 { 22 return $this->belongsTo('App\Models\User'); 23 } 24}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(ちなみに、$boardはnullではないです。@if (is_array($board) && !$board)も試しましたが、ダメでした。。。)

これを確実に確かめるなら<?php $board = true; ?>みたいな感じで直前に$boardに値を書き込んでみてはどうでしょうか。または{{dd($board)}}でその場でダンプしてみてください


コメントをうけて、質問内容を読み違えいたことに気づいたので追記します

isset これは、引数が存在するかどうか、ですので、空の配列でも変数が存在すればtrueを返します。
empty これは、引数が空かどうかを判別します。配列の場合は中身がなければteueを返します。
is_array これは、引数が配列かどうかを判別します。

あなたが渡しているboard配列じゃありません!

投稿2021/03/09 12:30

編集2021/03/09 12:47
mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Reikirin

2021/03/09 12:34

正しくdd($board)でデバッグはしました! #items=[] が出ました、、、
Reikirin

2021/03/09 13:02

なるほど、配列ではなく、”値”ということでよろしいでしょうか? この場合ですと、emptyなどの扱いが変わり、別の関数を用いる必要がありますか?
mikkame

2021/03/09 13:08

配列も値なのですが。 配列じゃなくてオブジェクトです。インスタンスです。 ->count()メソッドがあると思うのでそれで判別してください
Reikirin

2021/03/09 14:02

ありがとうございます。 @if (count($board) == 0) の形で上手くいきました! 以降、配列[]、オブジェクト{プロパティ1: 値1,プロパティ2: 値2} の違いに注意します。
Reikirin

2021/03/09 16:31

すみません、もしよろしければcountメソッドの使い方を教えていただけませんか? @if ($board->count()==0) の形で実行したところ、add.blade.php を実行したところ、$boardがあるかないか、ではなく、$boardの合計数が取得されてしまうのですが
Reikirin

2021/03/10 06:48

ご回答ありがとうございます。 質問の仕方が誤解を招く形で申し訳なかったのですが、 countメソッド、というより、その時ログインしているUserの$boardの中身が空か否か?を判断したいので、$board=0 or 1の場合のみが発生する様にしたいのです。 他のUserが$boardを作ってしまうと累積されてしまうので、 新しいUserがログインするたび$boardをクリアにしたいのですが、その方法を教えていただきたいです。
mikkame

2021/03/10 07:43

新しく質問たててください
Reikirin

2021/03/10 10:23 編集

$board = Board::with('user')->where('id', Auth::id())->get(); の形にすることで望みのものを取得することができる様になりました。 単純に ->get( 項目名 ); であることを理解せずに使っていたのが問題みたいです。 ->find( ID番号 ); に引っ張られて勘違いしていました。 回答に協力していただいた、m.ts10806さん、mikkameさん、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問