2014-10-10 86 views
-2

假设我有两个表的数据库:良好做法MVC

客户

payment_info

下表客户有字段:姓名,地址,payment_info_id

payment_info_id是一个外键链接到payment_info中的一行。 payment_info包含字段:id(链接到payment_info_id),银行,帐号。

因为我的应用程序的逻辑,每一个客户创建自己的支付信息的时间被存储在链接到他们行的客户表中的payment_info场单独一行。

我使用MVC架构。

保留这个'纯粹'并制作两个独立的模型(每个模型对应一个表),然后从customer_controller中的payment_info_controller中交叉加载并调用方法,或者创建一个只要它创建的混合模型客户中的一行还会在payment_info中创建一个?

希望这是有道理的!

+0

这个问题不是关于MVC,它更关于数据库规范化。 – Yang 2014-10-10 21:36:57

回答

1

你不应该依靠控制器来做到这一点。把逻辑放在你的模型中,放在服务层后面(如果需要的话),然后从你的控制器调用它。

你也应该扭转FK设置。将客户ID粘贴到payment_info中,并将其从客户中移除payment_info_id。这将使客户可以有多次付款。

控制器

$user = new User(name, etc...); 
$payment = new Payment(payment details...); 
$user->applyPayment($paymentInfo); 
$userService->save($user) 

在服务:

function save($user){ 
    //save user and update it with an id) 
    $user = $userDal->save($user); 
    //now that user has an id, you can generate/save payments. 
    $payment->save($user->getPayments()); 

} 

然后,您可以有userService加载用户和支付数据访问层。

服务/门面信息:http://www.dofactory.com/net/facade-design-pattern

注: - 你可能要拿出由特定服务产生更好的命名约定,因此它显然,付款将被保存/。例如:SaveUserAndPayment($ user)

+0

嗨对不起,这就是我的意思,模型!对不起,这是一个长时间的编码会议! – MrD 2014-10-10 21:32:19

+0

更新了我一些额外的信息 – 2014-10-10 21:36:39

+0

喜的答案 - 对不起,我不完全理解你的代码,我害怕。单个模型会用于两张桌子上吗? – MrD 2014-10-10 21:40:34

-1

永远保持纯正的你不需要更多的未使用的方法来加载比你也可以从客户做你的东西,而你有一些客户参数,需要得到一些相关的东西,从你做的付款当你有一些付款参数,并需要从中挖掘一些东西。您可以随时使用付款或客户或任何其他模型从任何控制器,以保持它像你可以gl和hf;)