【问题标题】:Trying to get property 'image' of non-object in Laravel试图在 Laravel 中获取非对象的属性“图像”
【发布时间】:2021-09-16 08:15:05
【问题描述】:

我正在做一个 laravel 项目。在这个项目中,当我尝试查看和编辑个人资料页面时。我收到此错误。

错误异常 试图获取非对象的属性“图像”(查看:C:\xampp\htdocs\HomeServices\resources\views\livewire\sprovider\sprovider-profile-component.blade.php) http://127.0.0.1:8000/sprovider/profile

SproviderProfileComponent.php :-

<?php

namespace App\Http\Livewire\Sprovider;

use App\Models\ServiceProvider;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;

class SproviderProfileComponent extends Component
{
    public function render()
    {
        $sprovider = ServiceProvider::where('user_id',Auth::user()->id)->first();
        return view('livewire.sprovider.sprovider-profile-component',['sprovider'=>$sprovider])->layout('layouts.base');
    }
}

模型/ServiceProvider.php :-

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ServiceProvider extends Model
{
    use HasFactory;

    protected $fillable = ['user_id'];

    public function category()
    {
        return $this->belongsTo(ServiceCategory::class,'service_category_id');
    }
}

sprovider-profile-component.blade.php

<div class="panel-body">
    <div class="row">
        <div class="col-md-4">
            @if($sprovider->image)
                <img src="{{asset('images/sproviders')}}/{{$sprovider->image}}" width="100%" />
            @else
                <img src="{{asset('images/sproviders/default.jpg')}}" width="100%" />
            @endif
        </div>
            <div class="col-md-8">
                <h3>Name: {{Auth::user()->name}}</h3>
                <p>{{$sprovider->about}}</p>
                <p><b>Email: </b>{{Auth::user()->email}}</p>
                <p><b>Phone: </b>{{Auth::user()->phone}}</p>
                <p><b>City: </b>{{$sprovider->city}}</p>
                <p><b>Service Category: </b>
                @if($sprovider->service_category_id)
                    {{$sprovider->category->name}}
                @endif
                </p>
                <p><b>Service Locations: {{$sprovider->service_locations}}</b></p>
                <a href="{{route('sprovider.edit_profile')}}" class="btn btn-info pull-right">Edit Profile</a>
            </div>
    </div>
</div>

【问题讨论】:

  • 执行dd($sprovider) 并检查结果中是否有image
  • 结果显示为空

标签: laravel


【解决方案1】:

这可能发生的唯一原因是$sprovidernull

当它发生时,$sprovider-&gt;image 将转换为(null)-&gt;image,这确实是Trying to get property 'image' of non-object

您可以这样做以防止 $sprovider 成为 null

$sprovider = ServiceProvider::where('user_id',Auth::user()->id)->firstOrFail(); 

通过使用firstOrFail 而不是first,您可以确保$sprovider 永远不会是null(顾名思义,如果它找不到任何提供程序,它将失败)。

您将收到另一个错误,提示找不到提供程序,这是另一个问题,可能是因为您没有该用户的任何提供程序或类似的东西。

【讨论】:

    【解决方案2】:

    两种可能

    1. $sprovider 为空并且

    2. 图像密钥在$sprovider ($sprovider-&gt;image) 中不可用可能是您在数据库表中拼错了图像,因此只需使用dd($sprovider);print_r($sprovider); 并检查图像密钥是否可用。

    【讨论】:

      猜你喜欢
      • 2015-09-22
      • 2017-03-20
      • 2014-03-25
      • 2015-01-25
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多