Search code examples
laraveltable-relationships

Laravel relationships - accessing related value in view


I can't find a solution to a seemingly simple problem with passing related data to a view. I have a model 'Companies' that belongs to 'Regions'. I've created the belongsTo relationship in my Companies model

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');

Also the hasMany relation in the Region model:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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

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

My show Controller passes the variable for the session row successfully to the view, but the moment I want to access the related table data with the following... (table 'region' with column 'region')

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

...I get the error

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

I've changed my models location to app\Models and I've made all the necessary namespace changes in the models & controllers, as well as the autoload in composer.json. I did a composer dump & config:clear and all of the other mvc references work.

I did not create migrations for the related tables since the tables exist and have standard reference data in it. I assume the relation created in the model is sufficient?

I'd appreciate some assistance.


Solution

  • Have you ensured that the existing table foreign keys are declared in your Laravel Model relationship methods? I see in your Company model that you declared a $primaryKey. What's the foreign key that references a Region in your companies table? Declare it in the 2nd parameter of the belongsTo method. Example: $this->belongsTo('App\Models\Region', 'unusual_region_id');