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'
));