I am trying to use a property from model relationship {{$item->items->item_name}}, but it says Attempt to read property "item_name" on null.
However, when I am trying to {{dd($item->items->item_name)}} it returns a string "Old Boots.
Why does it happen? The value is definitely there but I cant echo it…
UserItems table: id | user_id | item_id
UserItem Model:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class UserItem extends Model
{
use HasFactory;
public function items()
{
return $this->hasOne(Item::class, 'id');
}
}
Item table structure: id | item_name
Item Model:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Item extends Model
{
use HasFactory;
}
Controller function:
public function heroView() :View
{
return view('hero', [
'userItems' => UserItem::with('items')->where('user_id', Auth::id())->get()
]);
}
View:
<table>
@foreach ($userItems as $item)
<tr>
<td>{{$item->items->item_name}}</td>
</tr>
@endforeach
</table>
In view {{dd($item)}}:
