我正在CakePHP中创建一个网站,我对它有点新意。我找不到这方面的好资源,所以你去了:
我有一个用于注册用户的三表结构:Users
,Addresses
和Contacts
。我必须使用所有三个表的信息构建一个视图,如:
Full Name: [ ] (from Users) Shipping Address: [ ] (from Address) Mobile Phone: [ ] (from Contact) e-Mail Address: [ ] (from Contact)
处理这种情况的最佳方法是什么。 特别用于保存。创建一个新模型来表示这个,它本身就有save()
方法(也许是数据库中的sql视图)创建一个Controller来处理bind
或unbind
s的视图信息
我仍然想知道我将如何处理这两个联系人,因为它们将是两个不同的INSERT
我可以挖掘的任何暗示或资源都会很高兴。
答案 0 :(得分:10)
如果您使用的是最新的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');
然后在您的用户控制器添加方法中,您将拥有以下内容:
...
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
答案 1 :(得分:4)
CakePHP允许您使用关系轻松维护模型之间的链接,有关完整的详细信息,请参阅http://book.cakephp.org/view/78/Associations-Linking-Models-Together。然后检索正确的用户,你也将获得“免费”,其地址和联系信息。
答案 2 :(得分:1)
3个型号:用户,地址,联系
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 地址和联系人表
要在视图中使用它,只需在用户模型上调用一个带有递归的查找(并且顺便说一句,用户控制器仅使用用户模型)。
$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'
));