我已经建立了一个多态关系,其中表结构如下:
companies
id - integer
name - string
company_branches
id - integer
name - string
incharges
id - integer
name - string
inchargable_id - integer
inchargable_type - string
我还相应地设置了模型并正确保存了数据。我遇到的问题是在编辑过程中使用模型绑定显示incharges表的数据。编辑视图如下:
{!! Form::model($company, array("route" => array("companies.update", $company->id), "method"=>"PUT", "files"=>true)) !!}
<label>Company Name</label>
<div>
{!! Form::text('name') !!}
</div>
<label>Incharge Name</label>
<div>
{!! Form::text('incharge_name') !!}
</div>
{!! Form::close() !!}
编辑时name
文本字段中显示的数据是正确的。但是如何显示用于编辑的incharge名称?我可以通过$company->incharge->name
来获取incharge名称。
编辑:在PersonInCharge
模型中,我将多态关系设置为:
public function inchargable()
{
return $this->morphTo();
}
在Company
模型中:
public function incharge()
{
return $this->morphOne('PersonInCharge', 'inchargable');
}
在CompanyBranch
模型中:
public function incharge()
{
return $this->morphOne('PersonInCharge', 'inchargable');
}
答案 0 :(得分:2)
尝试,{!! Form::text('incharge[name]') !!}
您还需要(懒惰)-eager-load表单模型绑定的关系。您可以在Eloquent模型中使用Model::with('realtion')
或设置$with = ['relation']
属性。有关Laravel (Lazy-)Eager-Loading的更多信息。
答案 1 :(得分:1)
尝试:
{!! Form::text('incharge_name', $company->incharge->name) !!}
以这种方式向控制器添加连接:
$company = Company::where('id',$companyID)
->leftJoin('incharges', 'inchargable_id.company_id', '=', 'company.id')
->first();
(需要使用正确的字段!)