我有 9 个表,它们都喜欢连接在一起,它们都具有 employee 表中的外键 employee_id。我怎样才能得到它的 ORM 分布。下面是连接所有函数的数据库函数。
$modelEmployee = \DB::table('employees')
->select('*')
->join('employee_finances', 'employees.id', '=', 'employee_finances.employee_id')
->join('employee_addresses', 'employees.id', '=', 'employee_addresses.employee_id')
->join('employee_jobs', 'employees.id', '=', 'employee_jobs.employee_id')
->join('employee_admins', 'employees.id', '=', 'employee_admins.employee_id')
->join('employee_personals', 'employees.id', '=', 'employee_personals.employee_id')
->join('employee_memberships', 'employees.id', '=', 'employee_memberships.employee_id')
->where('employees.id', $id)
->get();
最佳答案
第一步
首先,为你的员工表创建模型,并向其他表模型添加各种关系
employees 表的 Eloquent 模型
namespace App\Models;
class Employee extends \Illuminate\Database\Eloquent\Model {
public function employee_finances()
{
return $this->hasMany(\App\Models\EmployeeFinance);
}
public function employee_addresses()
{
return $this->hasMany(\App\Models\EmployeeAddress);
}
public function employee_jobs()
{
return $this->hasMany(\App\Models\EmployeeJob);
}
public function employee_admins()
{
return $this->hasMany(\App\Models\EmployeeAdmin);
}
public function employee_personals()
{
return $this->hasMany(\App\Models\EmployeePersonal);
}
public function employee_memberships()
{
return $this->hasMany(\App\Models\EmployeeMembership);
}
第二步
现在为其他连接表创建模型。以下是 employee_finances 表的示例。 (同理,创建其他模型)
namespace App\Models;
class EmployeeFinance extends \Illuminate\Database\Eloquent\Model {
...
}
第 3 步
然后对于您的查询,您可以使用查询构建器的 with 和 whereHas 函数来使用关系。这相当于问题中提到的查询的结果,但结果的结构会有所不同;
\App\Models\Employee::with('employee_finances','employee_addresses','employee_jobs','employee_admins','employee_personals','employee_memberships')
->whereId($employeeid)
->whereHas('employee_finances')
->whereHas('employee_addresses')
->whereHas('employee_jobs')
->whereHas('employee_admins')
->whereHas('employee_personals')
->whereHas('employee_memberships')
->get();
结果
原始结果对象
原始结果将是普通构建器对象的对象,您不能在其中触发可以在模型 级别定义的进一步关系操作。 原始结果也将是结果的平面数组,并且可能更少。这里的一个示例是 id 列值将替换为主要员工的表列 id。
[
0 => [
'id' => 1,
'employee_name' => 'Employee',
'employee_finance_content' => 'finance_content',
'employee_personal_content' => 'personal_content',
'employee_jobs_content' => 'employee_jobs',
'employee_addresses_content' => 'employee_addresses',
'employee_admins_content' => 'employee_admins',
]
....
]
使用模型的新结果
结果将是 Employee 模型的实例。最终结果将是一个关联数组,其中每个关系都是数组的索引,但结果将是相关模型的一个实例,例如,employee_finances 将是一个索引或代表一个列和其中包含的值将是 EmployeeFinance 的一个实例,您可以在其上进一步执行 ORM 级别的事件。
[
0 => [
'id' => 1,
'employee_name' => 'Employee'
'employee_finances' => [
'id' => 2,
'employee_id' => 1,
'employee_finance_content' => 'finance_content'
],
'employee_addresses' => [
'id' => 10,
'employee_id' => 1,
'employee_address_content' => 'employee_address'
]
],
.....
]
关于php - 用于连接多个表的 Laravel ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064193/