php 无法在刀片视图中使用laravel关系属性

q43xntqr  于 2023-01-24  发布在  PHP
关注(0)|答案(3)|浏览(137)
    • 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)}}中:

9vw9lbht

9vw9lbht1#

你没有显示你的数据库,所以我只是用你在这里分享的数据来猜测。首先,如果每个用户项都有一个项,你需要把项名改成“项”。
还有一些其他的东西,你需要把逆关系设置为,我的意思是你必须把这个加到你的项目模型中,如果是一对一的关系,读这个来学习逆关系。
一对一反比关系(laravel文件)
最后,请删除“with”方法。您不需要它,laravel会自己找出关系。
说了所有的可能性。希望能有所帮助〈3

liwlm1x9

liwlm1x92#

最可能的原因是您的一个userItem没有项。
dd看起来是有效的,因为它在循环的第一次迭代时停止,但是丢失的项可能在userItem 4中丢失。
每当我在访问一个关系时使用两次箭头时,我总是进行防御性编码,并放入一个空合并操作符来捕捉缺少关系的情况。
你可以用这样的代码来证明

<table>
      @foreach ($userItems as $item)
        <tr>
          <td>{{$item->items->item_name ?? "no item"}}</td>
        </tr>
      @endforeach
     </table>
bvhaajcl

bvhaajcl3#

我终于成功了。模型里少了一个本地密钥。

<?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', 'item_id');
    }
}

相关问题