用于多态关系的表单模型绑定

时间:2015-07-26 18:00:04

标签: laravel laravel-5

我已经建立了一个多态关系,其中表结构如下:

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');
}

2 个答案:

答案 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();

(需要使用正确的字段!)