尝试获取非对象的属性(视图:C:\ laragon \ www \ blog \ resources \ views \ admin \ users \ index.blade.php)

时间:2018-11-05 20:42:45

标签: php laravel-5.6

当我要创建一个新用户时,会出现此类错误。并在图像链接上出现错误标记。如果我像$user->profile['avatar'])一样更改图像路线,则可以使用,但是在查看页面中,它不会显示图像。

查看页面:

<tbody>
    @if($users->count() > 0)
      @foreach($users as $user)
      <tr>
        <td>
          <img src="{{asset($user->profile->avatar)}}" width="60px" height="60px" style="border-radius: 50%;">
        </td>
        <td>
          {{ $user->name }}
        </td>
        <td>

          @if($user->admin)

          <a href="{{route('user.not.admin',['id' => $user->id])}}" class="btn btn-sm btn-outline-danger">Remove permission</a>

          @else

          <a href="{{route('user.admin',['id' => $user->id])}}" class="btn btn-sm btn-outline-primary">Make admin</a>

          @endif

        </td>
        <td>
          delete
        </td>
      </tr>
    @endforeach
    @else
        <tr>
           <th colspan="5" class="text-center">No users available!</th>
        </tr>
    @endif

  </tbody>
</table>

控制器功能:

public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|email'
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt('password')
        ]);

        $profile = Profile::create([
            'user_id' => $user->id,
            'avatar' => 'uploads/avatars/1.png'
        ]);

        Session::flash('success', 'User created successfully!');

        return redirect()->route('users');
    }

请帮助我解决此问题。如果您需要有关代码的更多信息,请告诉我。

5 个答案:

答案 0 :(得分:0)

store方法似乎很好,问题可能出在index方法上,该方法返回带有用户列表的视图,但没有返回profile关系,您可以尝试在索引视图中调用$user->profile()->avatar而不是$user->profile->avatar。这样,您就可以在访问关系时对其进行查询。

答案 1 :(得分:0)

您的查询返回的是数组还是对象?如果您转储它,您可能会发现它是一个数组,而您所需要的只是数组访问([])而不是对象访问(->)。

答案 2 :(得分:0)

您可以改为尝试

$user->profile($id)['avatar'];

考虑到您的个人资料功能的输入为$id,并且该功能返回您正在获取的用户个人资料信息

答案 3 :(得分:0)

这听起来像您的对象不存在或它是一个数组... 只需在$ user之前添加@

 {{asset(@$user->profile->avatar)}}

答案 4 :(得分:0)

根据您的帖子,我假设您有一个用于个人资料的单独表格,这是理想的选择。 您需要做的是打开Profile模型并创建这样的关系;

public function profile(){
    return $this->belongsTo('App\User', 'user_id', 'id');
}