首页 > 解决方案 > 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 关系轻松获得示例结果?

标签: laraveleloquentrelationshiplaravel-5.6

解决方案


您必须更改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


推荐阅读