- EDIT:已通过在模型关系中添加本地外键解决问题。**
- 问题:**
我尝试使用模型关系{{$item->items->item_name}}
中的属性,但它显示为Attempt to read property "item_name" on null
。
但是,当我尝试{{dd($item->items->item_name)}}
时,它返回一个字符串"Old Boots
。
为什么会这样呢?价值是肯定存在的,但我不能呼应它...
用户项目表:* * 身份证**|* * 用户标识**|* * 项目标识**
用户项目模型:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UserItem extends Model
{
use HasFactory;
public function items()
{
return $this->hasOne(Item::class, 'id');
}
}
物料表结构:* * 身份证**|* * 项目名称**
项目型号:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
use HasFactory;
}
控制器功能:
public function heroView() :View
{
return view('hero', [
'userItems' => UserItem::with('items')->where('user_id', Auth::id())->get()
]);
}
查看:
<table>
@foreach ($userItems as $item)
<tr>
<td>{{$item->items->item_name}}</td>
</tr>
@endforeach
</table>
在视图{{dd($item)}}
中:
3条答案
按热度按时间9vw9lbht1#
你没有显示你的数据库,所以我只是用你在这里分享的数据来猜测。首先,如果每个用户项都有一个项,你需要把项名改成“项”。
还有一些其他的东西,你需要把逆关系设置为,我的意思是你必须把这个加到你的项目模型中,如果是一对一的关系,读这个来学习逆关系。
一对一反比关系(laravel文件)
最后,请删除“with”方法。您不需要它,laravel会自己找出关系。
说了所有的可能性。希望能有所帮助〈3
liwlm1x92#
最可能的原因是您的一个userItem没有项。
dd看起来是有效的,因为它在循环的第一次迭代时停止,但是丢失的项可能在userItem 4中丢失。
每当我在访问一个关系时使用两次箭头时,我总是进行防御性编码,并放入一个空合并操作符来捕捉缺少关系的情况。
你可以用这样的代码来证明
bvhaajcl3#
我终于成功了。模型里少了一个本地密钥。