默认型号:
{!! 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() !!}
这可能吗?
答案 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。
我希望这至少能指出你正确的方向:)