掌田津耶乃氏著の"PHPフレームワークLaravel入門"の本を参考に、Laravelで、webアプリを作っています。
Userとしてログインし、情報を入力して、それをBoardに保存して、検索によって、そのBoardの情報を取り出すことができる様なアプリを作ろうとしております。
UserとBoardの情報が結びついていることがわかる様に、withによるEagerローディングを使って、検索結果のBoardの情報の隣にUserのnameを表示できる様にしたいです。
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 'information' => 'required', 14 ); 15 16 public function user() 17 { 18 return $this->belongsTo('App\Models\User'); 19 } 20 21 public function getData() 22 { 23 return $this->information; 24 } 25}
View↓
(board側のindex.blade.phpの@section('content')ディレクティブ)
index
1@section('content') 2<div class="container"> 3 <table> 4 <tr><th>Information</th><th>User</th></tr> 5 @foreach ($items as $item) 6 <tr> 7 <td>{{$item->getData()}}</td> 8 <td>{{$item->user->name}}</td> 9 </tr> 10 @endforeach 11 </table> 12</div> 13@endsection
Controller↓
BoardController
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Models\Board; 6use Illuminate\Http\Request; 7use Illuminate\Support\Facades\Auth; 8 9class BoardController extends Controller 10{ 11 public function index(Request $request) 12 { 13 $user = Auth::user(); 14 $items = Board::with('user')->get(); 15 $param = [ 16 'user' => $user, 17 'items' => $items, 18 ]; 19 return view('board/index', $param); 20 } 21 22 public function add(Request $request) 23 { 24 $user = Auth::user(); 25 $param = ['user' => $user]; 26 return view('board/add', $param); 27 } 28 29 public function create(Request $request) 30 { 31 $this->validate($request, Board::$rules); 32 $board = new Board; 33 $form = $request->all(); 34 unset($form['_token']); 35 $board->fill($form)->save(); 36 return redirect('/board'); 37 } 38}
以上で、/boardにアクセスすると、
Trying to get property 'name' of non-object (View: /Users/.../laravelapp/resources/views/board/index.blade.php)
の表示が出てしまい、Userのnameが取得できません。
board側のindex.blade.phpの
$user->nameとしてのnameは取得できるのですが、わかる方がいらっしゃいましたら、ご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー