如何绑定多个$ variable表单模型-Laravel?

时间:2018-02-21 08:56:29

标签: php laravel

默认型号:

{!! Form::model($stock, ['route' => ['stock.update_variant', $stock->id],'method'=>'put']) !!}

 {!! Form::close() !!}

我想做以下事情;

{!! Form::model($stock, $new_variant, ['route' => ['stock.update_variant', $stock->id],'method'=>'put']) !!}

 {!! Form::close() !!}

这可能吗?

1 个答案:

答案 0 :(得分:1)

我不能肯定你可以或不能这样做,因为Laravel Blade Forms的文档已经被慢慢抛弃,实际上甚至不再由Taylor Otwell管理(最后更新是为了Laravel 5.4)。然而!你还有其他选择!

如果您在数据库查询中生成Stock实例并使用连接,则可以使用两个表中的值加载$ stock对象,因此只需要在表单方法中使用$ stock对象 - >将其名称更改为 $ formData ,以免混淆自己。

例如:

你现在正在做我想象的事情:

$stock = Stock::where('x', 'y')->findOrFail('1');
$new_variant = NewVariant::where('z', 'a')->findOrFail($stock->id);

return $view('/')->with([compact('stock'), compact('new_variant')]);

相反,请使用连接查询:

$formData = Stock::where('x', 'y')
    ->join('new_variants', 'stocks.id', '=', 'new_variants.stock_id')
    ->select('stocks.*', 'new_variants.*')   
    ->findOrFail('1');

return $view('/')->with(compact('formData'));

这基本上是通过匹配相应的股票ID来获取x = y的股票并通过new_variants表中的相应新变量加入它。我相信如果你想返回所有字段,select方法是多余的。现在,您可以简单地访问from model binding中的$formData对象,它应该可以正常工作。

我会告诫你说这是一个自定义的解决方案,并且带有它自身的缺点。最重要的是表单请求将不再与模型相关联,因此在提交表单时您必须解除数据冲突,以确保使用适当的信息更新相应的模型。此外,如果两个表包含相同名称的字段,则必须在查询的select方法中对此进行解除冲突。如果是这种情况,请参阅原始对帐单上的Laravel documentation

我希望这至少能指出你正确的方向:)