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可以接受)。我想我需要弄清楚如何检查以确保用户/课程的精确匹配已经存在?