【问题标题】:Livewire Relation Ship not working with propertyLivewire Relation Ship 不与财产合作
【发布时间】:2021-02-10 20:35:29
【问题描述】:

好时光,谢谢他们帮助我解决这个问题。我实际上在 Laravel 中遇到了这个问题,我是 Livewire 的新手。


控制器

class ViewCourse extends Component{

public $course;

public function mount($id , $name = null , $mediaID = null){
    $this->course = course::findOrfail($id);
}

public function render(){
    return view('livewire.view-course')->extends('layouts.app');
}

关系模型

class course extends Model{

    public function teacher(){
        return $this->hasOne('App\Models\User' , 'id' , 'user_id')->select('name' , 'picture');
    }
}

刀锋密码

<p>{{$course->teacher->name}}</p>

我的错误

ErrorException
Trying to get property 'name' of non-object (View: C:\xampp\htdocs\rstacode\resources\views\livewire\view-course.blade.php)

【问题讨论】:

  • 如果你从关系中删除选择-&gt;select('name' , 'picture'),你能检查它是否有效
  • @Remul,谢谢它的工作!

标签: laravel laravel-livewire


【解决方案1】:

你必须这样做

$this->course = course::with('teacher')->findOrfail($id);

为了快速加载您的关系数据,请查看此处的文档:https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default

【讨论】:

    【解决方案2】:

    问题是您没有选择 Laravel 正确解析关系和获取用户模型所需的列。

    您可以删除选择或将id 列添加到您的选择:

    删除选择:

    public function teacher()
    {
        return $this->hasOne('App\Models\User', 'id', 'user_id');
    }
    

    将所需的列添加到选择中:

    public function teacher()
    {
        return $this->hasOne('App\Models\User', 'id', 'user_id')
            ->select([
                'id',
                'name',
                'picture',
            ]);
    }
    

    我个人只会删除选择,因为我看不到仅从关系中选择几列的任何价值。此外,如果您向用户表添加更多列,以后可能会引起更多麻烦。

    【讨论】:

      【解决方案3】:

      即使集合为空,您也总是试图从对象访问属性,这就是问题发生的原因。

      在打印之前始终检查集合是否具有关联的关系数据。

      如果你在PHP 7.*

      {{ $course->teacher->name ?? '' }}
      

      PHP 7.*之前

      {{ (isset($course->teacher->name) && !empty($course->teacher->name)) ? $course->teacher->name : '' }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 2013-12-09
        相关资源
        最近更新 更多