I am working on a query in Laravel 8 project for retrieving company details. Below is the structure and MySQL query.
# Getting company param from request.
SELECT c.company_name, p.position_name, s.salary
FROM tbl_company as c
JOIN tbl_company_type as t ON t.id = c.company_type_id
JOIN tbl_company_position as p ON p.company_id = c.id
JOIN tbl_comapny_salary as s ON s.position_id = p.id
where c.id = 1
Table structure:
tbl_company_type |
---|
id |
type |
description |
tbl_company |
---|
id |
company_type_id |
company_name |
description |
tbl_company_position |
---|
id |
position_name |
company_id |
tbl_comapny_salary |
---|
id |
position_id |
salary |
Company Models
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
protected $table = 'tbl_company';
public function listtype()
{
return $this->hasOne(Type::class, 'id', 'company_type_id');
}
public function listposition()
{
return $this->hasOne(Type::Position, 'company_id', 'id');
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Type extends Model
{
protected $table = 'tbl_company_type';
}
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Position extends Model
{
protected $table = 'tbl_company_position';
public function listsalary()
{
return $this->hasOne(Type::Salary, 'position_id', 'id');
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Salary extends Model
{
protected $table = 'tbl_comapny_salary';
}
Retrieving comany details using relation
$companydetails = Company::with('listtype', 'listposition','listsalary')-
>whereRaw("tbl_company = 2")->get();
Getting this error
message": "Call to undefined relationship [listsalary] on model [App\Models\Position]