所以我是个初学蛋糕PHP的人。我正在尝试构建我的数据库,以便用户可以将活动添加到场所,但如果场所已经具有该特定活动,则不会添加记录。例如:
玫瑰和皇冠= Pin-Pong
玫瑰和皇冠=斯诺克
玫瑰和皇冠=乒乓球
目前,即使使用相同的activity.For示例,您也可以多次使用相同的场所;
玫瑰和皇冠= Pin-Pong
玫瑰和皇冠=斯诺克
玫瑰和皇冠=乒乓球
玫瑰和皇冠= Pin-Pong
public function add()
{
$venueActivity = $this->VenueActivities->newEntity();
if ($this->request->is('post')) {
$venueActivity = $this->VenueActivities->patchEntity($venueActivity, $this->request->data);
if ($this->VenueActivities->save($venueActivity)) {
$this->Flash->success(__('The venue activity has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The venue activity could not be saved. Please, try again.'));
}
}
$venues = $this->VenueActivities->Venues->find('list', ['limit' => 200]);
$activities = $this->VenueActivities->Activities->find('list', ['limit' => 200]);
$this->set(compact('venues', 'venueActivity', 'activities'));
$this->set('_serialize', ['venueActivities']);
}我已经能够计算出如何完全覆盖记录,以便他们只有一个场所记录(见下面的代码),但我需要它只覆盖记录,如果相同的活动已经输入。但是你可以拥有所有不同的活动。
public function add()
{
$venueActivity = $this->VenueActivities->newEntity();
if($this->request->is('post')) {
$venueActivity = $this->VenueActivities->patchEntity($venueActivity, $this->request->data);
$oldVenueActivity = $this->VenueActivities->find()->where(['venue_id' => $venueActivity->venue_id]);
foreach($oldVenueActivity as $activity) {
$this->VenueActivities->delete($activity);
}
if ($this->VenueActivities->save($venueActivity)) {
$this->Flash->success(__('The venue activity has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The venue activity could not be saved. Please, try again.'));
}
}
$venues = $this->VenueActivities->Venues->find('list', ['limit' => 200]);
$activities = $this->VenueActivities->Activities->find('list', ['limit' => 200]);
$this->set(compact('venues', 'venueActivity', 'activities'));
$this->set('_serialize', ['venueActivities']);
}提前谢谢。
发布于 2017-05-24 18:39:39
请重新考虑您对此特定问题的处理方法。
您现在拥有的内容:场馆、活动和venue_activities。您正在VenueActivities上操作,以加入会场和活动。
在我看来,你应该做的是:只烘焙会场和活动,并在它们的表类中为它们设置belongsToMany关联。然后,在VenueController中,您可以创建例如manageActivities函数:
public function manageActivities($id = null){
$venue = $this->Venues->get($id);
if($this->request->is(['post','put'])){
//patch entity and save
}
$activities = $this->Venues->Activities->find('list');
$this->set(compact('venue','activities');
}然后,在manage_activities.ctp中:
$this->Form->input('activities._ids', ['multiple' => 'checkbox']);上面的代码将产生多选的活动列表。如果您要选中其他活动,则会添加与其关联。如果您将取消选中现有活动,则将删除与此特定活动的关联,并保留其余选定活动。
更多信息:https://book.cakephp.org/3.0/en/orm/associations.html#belongstomany-associations
https://stackoverflow.com/questions/44155181
复制相似问题