Cakephp:用于在hasMany关系中创建模型的Designpattern

时间:2010-12-24 13:34:19

标签: cakephp

我有两种型号:汽车和乘客。

  

Car hasMany Passenger

     

乘客所属于汽车

我设法为每个模型创建添加功能,并设法解决它们之间的hasMany关系。

现在我正在尝试创建一个addCar函数和视图,允许用户创建一辆新车并自动生成乘客。

我想到了这样的事情

  • 视图要求用户输入汽车信息
  • 该视图有一些字段允许临时添加新乘客并删除它们
  • 当用户保存新车时,会创建乘客的实体,创建汽车的实体并将乘客链接到汽车。
  • 如果用户决定取消所有内容,则DB保持不变。

现在我的问题是:最好的方法是什么?是否有关于此类实体和相关子实体创建的模式/教程?

澄清:与汽车相关的乘客在汽车存在之前不存在。

1 个答案:

答案 0 :(得分:1)

在视图 views / passengers / add_cars.ctp 中使用以下代码:

<?php
echo $this->Form->create('Car');
echo $this->Form->input('name');
echo $this->Form->input('model');
echo $this->Form->input('Passenger.0.name');
echo $this->Form->input('Passenger.0.age');
echo $this->Form->input('Passenger.1.name');
echo $this->Form->input('Passenger.1.age');
echo $this->Form->end();
?>

这基本上从输入汽车信息的必要字段开始。然后,您可以使用常规格式Passenger.{$i}.name开始循环,以便在添加新车时动态添加乘客。您可以使用jQuery创建“添加”和“删除”按钮,这些按钮将添加或删除Passenger表单条目的行。

passengers_controller.php 中(假设这是您想要add_cars的控制器),请使用saveAll功能:

function add_cars() {
    if (!empty($this->data)) {
        if ($this->Passenger->Car->saveAll($this->data)) {
            $this->Session->setFlash('Success');
            $this->redirect('/');
        } else {
            $this->Session->setFlash('Error');
        }
    }
}

希望有所帮助。