首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蛋糕PHP添加和编辑记录

蛋糕PHP添加和编辑记录
EN

Stack Overflow用户
提问于 2017-05-24 18:03:04
回答 1查看 46关注 0票数 0

所以我是个初学蛋糕PHP的人。我正在尝试构建我的数据库,以便用户可以将活动添加到场所,但如果场所已经具有该特定活动,则不会添加记录。例如:

玫瑰和皇冠= Pin-Pong

玫瑰和皇冠=斯诺克

玫瑰和皇冠=乒乓球

目前,即使使用相同的activity.For示例,您也可以多次使用相同的场所;

玫瑰和皇冠= Pin-Pong

玫瑰和皇冠=斯诺克

玫瑰和皇冠=乒乓球

玫瑰和皇冠= Pin-Pong

代码语言:javascript
复制
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']);
}

我已经能够计算出如何完全覆盖记录,以便他们只有一个场所记录(见下面的代码),但我需要它只覆盖记录,如果相同的活动已经输入。但是你可以拥有所有不同的活动。

代码语言:javascript
复制
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']);
}

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-24 18:39:39

请重新考虑您对此特定问题的处理方法。

您现在拥有的内容:场馆、活动和venue_activities。您正在VenueActivities上操作,以加入会场和活动。

在我看来,你应该做的是:只烘焙会场和活动,并在它们的表类中为它们设置belongsToMany关联。然后,在VenueController中,您可以创建例如manageActivities函数:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
$this->Form->input('activities._ids', ['multiple' => 'checkbox']);

上面的代码将产生多选的活动列表。如果您要选中其他活动,则会添加与其关联。如果您将取消选中现有活动,则将删除与此特定活动的关联,并保留其余选定活动。

更多信息:https://book.cakephp.org/3.0/en/orm/associations.html#belongstomany-associations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44155181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档