Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP中的关联对象_Php_Oop_Cakephp_Relational Database - Fatal编程技术网

CakePHP中的关联对象

CakePHP中的关联对象,php,oop,cakephp,relational-database,Php,Oop,Cakephp,Relational Database,我有用户,我有课程。我试图在用户查看课程列表时为他们创建一个“加入”按钮,以便他们订阅课程 我被告知使用 class Course extends AppModel { public $hasAndBelongsToMany = array('User'); } 及 但是我不知道如何实现实际的按钮和将信息发布到名为courses\u users 我在哪里实现这一点 提前谢谢 如果您是新来的,我建议您使用cake bake实用程序,它将检查您的表,询问一些有关关系的问题,并为数据库中的所有基

我有用户,我有课程。我试图在用户查看课程列表时为他们创建一个“加入”按钮,以便他们订阅课程

我被告知使用

class Course extends AppModel
{
  public $hasAndBelongsToMany = array('User');
}

但是我不知道如何实现实际的按钮和将信息发布到名为
courses\u users

我在哪里实现这一点


提前谢谢

如果您是新来的,我建议您使用cake bake实用程序,它将检查您的表,询问一些有关关系的问题,并为数据库中的所有基本创建、更新和删除操作构建模型、控制器和视图。然后,您可以根据需要修改它们。我仍然这样做以节省大量时间。

如果您是新来的,我建议您使用蛋糕烘焙实用程序,它将检查您的表,询问一些有关关系的问题,并为数据库中的所有基本创建、更新和删除操作构建模型、控制器和视图。然后,您可以根据需要修改它们。我仍然这样做以节省大量时间。

您希望将学生ID和课程ID发送到您的
saveAll()
方法。您可以通过课程控制员执行此操作,如下所示:

<?php
class CoursesController extends AppController {

    public function join($courseId) {
        $data = array(
            'Course' => array(
                'id' => $courseId
            ),
            'Student' => array(
                'id' => $this->Auth->user('id') // ID of logged in user
            )
        );

        if ($this->Course->saveAll($data)) {
            $this->Session->setFlash( __('Successfully joined course.'));
        }
        else {
            $this->Session->setFlash( __('Error joining course.'));
        }

        $this->redirect('/');
    }
}

您希望将学生ID和课程ID发送到您的
saveAll()
方法。您可以通过课程控制员执行此操作,如下所示:

<?php
class CoursesController extends AppController {

    public function join($courseId) {
        $data = array(
            'Course' => array(
                'id' => $courseId
            ),
            'Student' => array(
                'id' => $this->Auth->user('id') // ID of logged in user
            )
        );

        if ($this->Course->saveAll($data)) {
            $this->Session->setFlash( __('Successfully joined course.'));
        }
        else {
            $this->Session->setFlash( __('Error joining course.'));
        }

        $this->redirect('/');
    }
}

Abracadver是正确的,您将从自动烘焙的模型/控制器/视图中获益,以简化您的基本任务并了解如何完成简单的工作。如果你想要一个用户界面而不是一个控制台来烘焙你的文件,请使用这个工具:谢谢大家的提示。Abracadver是对的,您将受益于自动烘焙的模型/控制器/视图,以简化您的基本任务,并了解如何完成简单的工作。如果你想要一个用户界面而不是一个控制台来烘焙你的文件,请使用这个工具:谢谢大家的提示。CakePHP基于约定优先于配置的原则,当课程模型和用户模型之间存在HABTM关系时,它假设数据库中有一个courses_users表,并在保存与课程相关联的用户时自动写入,即使调用的函数是$this->Course->saveAll()(保存相关数据)。@Chris这实际上很完美-它工作得很好,只是当另一个用户注册同一课程时,它会使用新用户名写入文件,即使两个对象都附加了$hasandbelongtomy。您知道为什么会发生这种情况吗?为CakePHP保存HABTM数据的默认行为是删除与您保存的记录相关联的所有记录,然后从您的数据中创建记录(如下面链接中针对唯一选项所述):,一个解决方案是用'unique'=>keepExisting'声明您的habtm关系。@Chris所以我尝试了'unique'=>keepExisting'在两者上,它一直在写。false非常接近,但允许重复(因此用户5课程8是可以接受的)。我想我需要找出如何检查以确保用户/课程的精确匹配已经存在?CakePHP基于约定优于配置的原则,当课程模型和用户模型之间存在HABTM关系时,它假设数据库中有一个courses_users表,当您保存与课程相关联的用户时,会自动写入该表,即使调用的函数是$this->Course->saveAll()(保存相关数据)。@Chris这实际上很完美-除了其他用户注册同一课程外,它工作得很好,它使用新用户名写入文件,即使两个对象都附加了$HasandBelongToMany。您知道为什么会发生这种情况吗?为CakePHP保存HABTM数据的默认行为是删除与您保存的记录相关联的所有记录,然后从您的数据中创建记录(如下面链接中针对唯一选项所述):,一个解决方案是用'unique'=>keepExisting'声明您的habtm关系。@Chris所以我尝试了'unique'=>keepExisting'在两者上,它一直在写。false很接近,但允许重复(因此用户5课程8可以接受)。我想我需要弄清楚如何检查以确保用户/课程的精确匹配已经存在?