Laravel - 使用单个表单将数据发布到多个表

时间:2015-11-24 15:59:25

标签: php laravel laravel-5 eloquent laravel-5.1

让我说我有这个表格(链接到命名路线),其中包含3个文字输入:

{!! Form::open(['route' => 'domain.store'])!!}
{!!  Form::text('srv_prefix',null, $attributes = array('class' => 'form-control input-md')) !!}
{!!  Form::text('srv_ip',null, $attributes = array('class' => 'form-control input-md')) !!}
{!!  Form::text('domain',null, $attributes = array('class' => 'form-control input-md')) !!}
{!!  Form::submit('create') !!}

路由在我的控制器上调用此函数:

public function store(CreateDomainRequest $request, Domain $domain)
{
    $domain->create($request->all());
    return redirect()->route('domain.index');
}

总是作为示例,让我们说我有2个表:domains来存储我的域名,servers来存储我的服务器信息(第一和第二文本输入)实际上我设法使用上面提到的控制器在我的第一个表上进行插入。我的问题是如何通过表单上的单个提交在2个表上进行插入?如何处理每个表的请求和控制器?

这是我到目前为止所做的:

1 - 我已经有2个相关模型(ServerDomain):

Class Server extends Eloquent {
    public function domain(){
    return $this->belongsTo('Domain');
    }
// $fillable and stuff..
}

-

Class Domain extends Eloquent {
    public function servers(){
    return $this->hasMany('Server');
    }
//
}

2 - 我使用了雄辩,我的表格是相关的。

    Schema::table('servers', function($table){
        $table->foreign('id_domain')
            ->references('id_dom')
            ->on('domains')
            ->onDelete('cascade');
    });

documentation未显示如何使用表单插入相关模型。谢谢你的帮助:)

1 个答案:

答案 0 :(得分:0)

以下是我将如何处理这个问题。我假设srv_prefixsrv_ip都是Server的属性。

public function store(CreateDomainRequest $request, Domain $domain, Server $server)
{
    // Since domain is the parent, we need to start there.
    $domain = $domain->create($request->all());

    // Now you can create the server model
    $server->fill([
        'prefix' => \Input::get('srv_prefix'),
        'ip' => \Input::get('srv_ip')
    ]);

    // Now we can attach the server to the domain
    $domain->servers()->save($server);

    return redirect()->route('domain.index');
}