Laravel 关系 - 访问视图中的相关值

Laravel relationships - accessing related value in view

对于将相关数据传递到视图这一看似简单的问题,我找不到解决方案。我有一个模型 'Companies' 属于 'Regions'。 我在公司模型中创建了 belongsTo 关系

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
protected $table = 'companies';
protected $primaryKey = 'Comp_id';
protected $fillable = ['industrylink_id', 'region_id','companyname','contactno','regno','vatno','salaryroll','numemployees'];

public function employees(){
    return $this->hasMany('App\Models\Employee');
}

public function region(){
    return $this->belongsTo('App\Models\Region');

还有Region模型中的hasMany关系:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Region extends Model
{
protected $table = 'regions';

public function companies(){
    return $this->hasMany('App\Models\Company');
}    
}

我的 show 控制器成功地将会话行的变量传递给视图,但是当我想使用以下内容访问相关 table 数据时...(table 'region' 列 'region')

<p>Region: {{ $company->region->region }}</p> -->

...我收到错误

"Trying to get property of non-object: (View:..."

我已将我的模型位置更改为 app\Models,并且在模型和控制器中进行了所有必要的命名空间更改,并在 composer.json 中进行了自动加载。我做了一个 composer dump & config:clear 和所有其他 mvc 参考工作。

我没有为相关的 table 创建迁移,因为 table 存在并且其中有标准参考数据。我认为在模型中创建的关系就足够了吗?

非常感谢您的帮助。

通常,当变量或关系为空时会出现此错误,因此请确保公司不为空并且有区域。如果您确定公司不为空,请检查关系:

{{ empty($company->region) ? 'No region' : $company->region->region }}

你试过吗:

dd($company->region)

看看它有什么数据return。

您是否确保在 Laravel 模型关系方法中声明了现有的 table 外键?我在您的 Company 模型中看到您声明了 $primaryKey。在您的 companies table 中引用 Region 的外键是什么?在 belongsTo 方法的第二个参数中声明它。示例:$this->belongsTo('App\Models\Region', 'unusual_region_id');