Laravel表单模型绑定具有双重一对一关系错误

时间:2014-11-04 08:59:23

标签: php forms validation laravel relationship

所以在摆弄了一天后,我觉得自己有点碰壁,想得到一些指示。我的数据库中有一个相当普通的用户表,每个用户可以选择2个地址(一个用于计费,一个用于接收)。在我的表单中,这与表单模型绑定相当不错,我可以使用下面的Blade代码生成适当的字段:

{{ Form::text('billing[city]') }}
{{ Form::text('receiving[city]') }}

以类似的方式,我可以通过使用:

在控制器中看到结果
$billing = $user->billing;
$billing->city = Input::get('billing.city');

$receiving = $user->receiving;
$receiving->city = Input::get('receiving.city');

现在我遇到的问题是如果我单独保存所有3个模型,如$user->save();$billing->save();$receiving->save();,我将有3个单独的错误组。通常情况下这很好,因为我可以将它们合并为一个大的MessageBag,但在这种情况下,任何一个地址中的任何错误都不会列出,如果它来自帐单地址或接收地址。相反,我的错误只有city而不是billing.city,而不是像我希望的那样。

MessageBag类似乎不支持为所有内容或类似内容添加前缀的方法,对于我来说,在现有类中添加方法似乎并不明智,因为这会破坏我的错误如果我们决定将来更新Laravel。

任何类型的指针或帮助都会受到赞赏,我主要使用这个项目来获得Laravel的支持,所以非常欢迎一种截然不同的方法。

1 个答案:

答案 0 :(得分:0)

我对Ardent不熟悉,但也许关联地址和使用push应该保存一切将返回给你一个MessageBag包含所有的东西。

// Create User
$user = new User;
$user->name = Input::get('name');
$user->email = Input::get('email');

// Create addresses
$billing = $user->billing;
$billing->city = Input::get('billing.city');

$receiving = $user->receiving;
$receiving->city = Input::get('receiving.city');

$user->address()->associate($billing);
$user->address()->associate($receiving);
$user->push();