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

时间:2017-01-25 09:06:29

标签: laravel table-relationships

我无法找到将相关数据传递给视图的看似简单问题的解决方案。我有一个属于'Regions'的模型'Companies'。 我在公司模型中创建了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控制器将会话行的变量成功传递给视图,但是我想要使用以下内容访问相关的表数据...(表'region',列'region')

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

...我收到了错误

  

“试图获取非对象的属性:(查看:...”

我已将模型位置更改为app \ Models,并且我已在模型和模型中进行了所有必要的命名空间更改。控制器,以及composer.json中的自动加载。我做了一个作曲家转储&amp; config:clear,所有其他mvc引用都有效。

我没有为相关表创建迁移,因为表存在并且其中包含标准引用数据。我假设在模型中创建的关系是否足够?

我很感激一些帮助。

3 个答案:

答案 0 :(得分:2)

通常,当变量或关系为空时,您会收到此错误,因此请确保公司不为空并且具有区域。如果你确定公司不是空的,只需检查关系:

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

您是否尝试过:

dd($company->region)

并查看它返回的数据。