CakePHP多模型视图
时间:2020-03-06 14:30:00 来源:igfitidea点击:
我正在CakePHP中创建一个网站,并且它是一个新的网站。在这件事上,我找不到很好的资源,所以我们去了:
我有一个用于注册用户的三表结构:"用户","地址"和"联系人"。我必须使用所有三个表的信息来构建视图,例如:
Full Name: [ ] (from Users) Shipping Address: [ ] (from Address) Mobile Phone: [ ] (from Contact) e-Mail Address: [ ] (from Contact)
处理这种情况的最佳方法是什么。专门用于保存。创建一个新模型来表示这一点,它本身将具有一个save()方法(可能是数据库中的一个sql视图)。
我仍然想知道我将如何处理这两个联系人,因为它们将是两个不同的" INSERT"
我可以挖掘的任何提示或者资源都会很高兴。
解决方案
CakePHP允许我们使用关系轻松维护模型之间的链接,有关完整的详细信息,请参见http://book.cakephp.org/view/78/Associations-Linking-Models-Together。然后获取合适的用户,我们还将获得"免费",其地址和联系信息。
如果我们使用的是最新的1.2代码,请在api中检出Model :: saveAll
例如。视图可能看起来像这样:
echo $form->create('User', array('action' => 'add'); echo $form->input('User.name'); echo $form->input('Address.line_1'); echo $form->input('Contact.tel'); echo $form->end('Save');
然后,在用户控制器的add方法中,我们将得到类似以下内容的信息:
... if($this->User->saveAll($this->data)) { $this->Session->setFlash('Save Successful'); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash('Please review the form for errors'); } ...
在用户模型中,我们将需要以下内容:
var $hasOne = array('Address', 'Contact');
希望对我们有所帮助!
http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1
3 models : User, Address, Contact
User hasOne Address, Contact Address belongsTo User Contact belongsTo User
在模型中,我们可以这样定义:
class User extends AppModel { var $name = 'User'; var $hasOne = array('Address','Contact'); ..
要进行此视图,我们需要user_id字段ind地址和contacts表
要在视图中使用它,我们只需在用户模型上以递归1调用查找(顺便说一句,用户控制器仅使用用户模型)。
$this->User->recursive = 1; $this->set('user', $this->User->find('first', array('conditions'=>array('id'=>666)));
这将导致此数组供我们查看:
array( 'Use' => array( 'id' => 666, 'name' => 'Alexander' ), 'Address' => array( 'id' => 123, 'zip' => 555 ), 'Contact' => array( 'id' => 432, 'phone' => '555-1515' ));