laravel - Laravel:如何从具有多态关系雄辩模型的表中轻松获取值?
问题描述
我的数据库表中有员工列表:
表:员工
员工型号代码:
public function workplace()
{
return $this->morphTo();
}
公司型号代码:
public function workers()
{
return $this->morphMany('App\Employee', 'company');
}
分公司型号代码:
public function workers()
{
return $this->morphMany('App\Employee', 'company');
}
现在我得到不同形式的用户工作场所:
$userWorkplaces = Employee::where('user_id', Auth::id())->get();
$workplace_info = [];
foreach ($userWorkplaces as $workplace) {
if($workplace->company_type == "App\Company") {
$company = Company::findOrFail($workplace->company_id);
$type = 'Company';
} elseif($workplace->company_type == "App\Branch") {
$company = Branch::findOrFail($workplace->company_id);
$type = 'Branch';
}
$workplace_info[] = [
'company' => $company->name,
'type' => $type
];
}
dump($workplace_info);
结果:
array:3 [
0 => array:2 [
"company" => "Mahorat"
"type" => "Company"
]
1 => array:2 [
"company" => "Babolo"
"type" => "Company"
]
2 => array:2 [
"company" => "Филиал Махорат"
"type" => "Branch"
]
]
如何通过在模型中创建 laravel 关系轻松获得示例结果?
解决方案
您必须更改Employee
关系函数名称company
,因为您在员工表中有company_id
和字段company_type
员工型号代码:
public function company()
{
return $this->morphTo();
}
现在获取数据
$employees = Employee::where('user_id', Auth::id())->get();
$workplace_info = [];
foreach($employees as $employee){
$workplace_info[]['company'] = $employee->company;
$workplace_info[]['type'] = get_class($employee->company);
}
dd($workplace_info);
详情https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations
推荐阅读
- flutter - 连接两个 document.data()['field'] 字段
- flutter - 在没有 super.dispose() 的情况下覆盖 dispose() 是否有效?
- google-apps-script - 如何使用新工作表作为输入源来总结将它们排序为日期的值
- python - 如何将函数与python中的列表结合起来?
- c++ - 如何在 CMake 中使用 Boost Log?Find_Package 错误
- mysql - SQL 两个 Fk 在同一列
- r - 尝试安装 tidyverse(集群 slurm)时遇到问题
- javascript - 如何将自动完成或 keydown 绑定到动态创建的跨度?
- php - 我无法使用 php 和 htaccess 进行分页
- python-3.x - 从具有不同域和trusted_connection = true的python连接SQL Server