好吧,对于我在Cakephp 2.2.3中的项目,我设置了我的数据库和控制器并烘焙了所有内容。我仔细检查了一切,它的全部工作(添加,编辑,删除)。我无法工作的一件事是保存到users
表和websites
表之间的中间表。中间表是user_websites
。 user_websites
表只有3个字段:id
,user_id
和website_id
。
当我以注册用户身份登录并进入网站添加页面时,我可以添加网站没有问题,但它只保存到websites
表,而user_websites
表中没有任何内容。摆弄WebsitesController
中的添加功能我可以将website_id
保存在user_websites
表中,但同样没有user_id
。显然,我需要发生的是,在添加新网站时,应该将该记录保存到websites
表中,并使用当前登录用户的id和user_websites
表添加记录。刚刚保存的website_id
。任何帮助,将不胜感激。谢谢!
这是我的代码:
public $hasMany = array(
'UserWebsite' => array(
'className' => 'UserWebsite',
'foreignKey' => 'user_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
public $hasMany = array(
'UserWebsite' => array(
'className' => 'UserWebsite',
'foreignKey' => 'user_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
public $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'joinTable' => 'users_websites',
'foreignKey' => 'website_id',
'associationForeignKey' => 'user_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Website' => array(
'className' => 'Website',
'foreignKey' => 'website_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public function add() {
if ($this->request->is('post')) {
$this->Website->create();
if ($this->Website->UserWebsite->saveAll($this->request->data, array('deep' => true))) {
$log = $this->Website->getDataSource()->getLog(false, false);
debug($log);
$this->Session->setFlash(__('The website has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The website could not be saved. Please, try again.'));
}
}
}
答案 0 :(得分:0)
当然,在寻求帮助后不久,我在我的一个伙伴的帮助下解决了这个问题。对于那些可能需要答案或者可能有更好解决方案的人来说,我添加的是:
我只是将数据的user_id设置为当前登录用户的id,该ID在我的AppController的beforeFilter中设置。
public function add() {
if ($this->request->is('post')) {
$this->Website->create();
// This is the line I added
$this->request->data['user_id'] = $this->Auth->user('id');
if ($this->Website->UserWebsite->saveAll($this->request->data, array('deep' => true))) {
$this->Session->setFlash(__('The website has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The website could not be saved. Please, try again.'));
}
}
}
答案 1 :(得分:0)
尽管如此,你仍然没有采用相应的CakePHP方式。
它目前只能工作,因为你定义了一个hasMany,在这种情况下不是正确的关系,因为你在这里只需要HABTM。
将您的表重命名为:
users_websites
这是正确的CakePHP,你可以看到你实际上也在HABTM中以这种方式定义它。
现在您可以删除hasMany,Cake应该通过HABTM自动保存,而不是像现在这样通过hasMany保存。
你仍然需要像你一样做,因为user_id没有通过你的表单/请求定义,你总是需要像你一样定义它。