【问题标题】:Laravel - Trying to get property 'name' of non-objectLaravel - 试图获取非对象的属性“名称”
【发布时间】:2019-12-13 01:24:40
【问题描述】:

我正在制作一个显示用户和他们工作的公司的视图。

在我的用户模型中,我返回如下视图:

return view('users.index', ['users' => $model->all()]);

模型 $model->all() 是我的用户模型。

然后在我的 index.blade 文件中,我像这样遍历数据:

@foreach ($users as $user)
                                <tr>
                                    <td>{{ $user->name }}</td>
                                    <td>
                                        <a href="mailto:{{ $user->email }}">{{ $user->email }}</a>
                                    </td>
                                    <td>{{ $user->created_at->format('d/m/Y H:i') }}</td>
                                    <td>{{ $user->company->name }}</td>
                                    <td class="text-right">
                                        <div class="dropdown">
                                            <a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                                <i class="fas fa-ellipsis-v"></i>
                                            </a>
                                            <div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
                                                @if ($user->id != auth()->id())
                                                    <form action="{{ route('user.destroy', $user) }}" method="post">
                                                        @csrf
                                                        @method('delete')

                                                        <a class="dropdown-item" href="{{ route('user.edit', $user) }}">{{ __('Edit') }}</a>
                                                        <button type="button" class="dropdown-item" onclick="confirm('{{ __("Are you sure you want to delete this user?") }}') ? this.parentElement.submit() : ''">
                                                            {{ __('Delete') }}
                                                        </button>
                                                    </form>    
                                                @else
                                                    <a class="dropdown-item" href="{{ route('profile.edit') }}">{{ __('Edit') }}</a>
                                                @endif
                                            </div>
                                        </div>
                                    </td>
                                </tr>
                            @endforeach

但是当我尝试显示 $user->company->name 时出现以下错误:

试图获取非对象的属性“名称”

我尝试使用 dd($user->company) 进行调试,它显示了连接到用户的公司的所有公司信息。然后我尝试了 dd($user->company->name) 并显示了公司名称。

我不明白为什么我不能只显示 $user-company->name 而不会出现错误,但是当我 dd($user->company->name) 时它会显示公司名称。

谁能指出我正确的方向。

【问题讨论】:

  • 似乎用户模式与公司有关系。而且我猜您的用户对象之一没有公司信息。当您转储所有用户对象时,您是否检查了所有用户的公司存在?

标签: laravel


【解决方案1】:

它可能会显示错误,因为您的某个用户没有公司。您的循环的第一个有一个,这就是为什么当您dd($user-&gt;company) 时,您会看到一家公司。但这并不意味着第二个或第三个有一个。您可以执行 if 语句以捕获任何 null 公司。像

if($user->company == null){ 
    dd($user); 
}

或者,您也可以只使用dd($users-&gt;pluck('company','id'));,这将向您显示一个集合,其中用户 ID 作为键,相关公司(或 null)作为值。

【讨论】:

    【解决方案2】:

    你可以使用optional() helper 来解决这个问题。有些用户没有公司。所以你可以像optional($user-&gt;company)-&gt;name这样显示它们,如果用户没有公司,你不会收到错误

    【讨论】:

      【解决方案3】:

      如果您尝试获取关系对象值,您可能会遇到此类错误。由于有些用户没有公司详细信息。

      试试下面的代码。

      {{ @$user->company->name }}
      

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2020-09-28
        • 2021-09-03
        • 2019-05-23
        • 2019-07-11
        • 2021-06-05
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多