我是新手解析,我正在尝试使用HTML / Javascript创建一个考勤应用程序,并将解析作为后端。
在深入研究之前,我有一些概念和技术实施问题,以确保我没有走错路。
我有两个对象(表格):一个包含学生的姓名,ID和组(称之为#include <iostream>
#include <boost/variant.hpp>
#include <string>
#include <conio.h>
class CnVisitor : public boost::static_visitor<>
{
public:
void operator()(double& valueFloat ) const
{
std::cout << (double)valueFloat;
}
void operator()(std::string& valueString ) const
{
std::cout << valueString.c_str ();
}
};
int main()
{
std::vector< boost::variant< double, std::string >> vec;
vec.push_back((double)1.423423);
vec.push_back((std::string)"some text");
CnVisitor l_Visitor;
for ( int i = 0; i < vec.size (); ++i )
{
boost::apply_visitor ( l_Visitor, vec[i] );
}
_getch ();
}
):
#include <iostream>
#include <boost/variant.hpp>
#include <string>
#include <conio.h>
class CnVisitorReturn : public boost::static_visitor<bool>
{
public:
bool operator()(double& valueFloat ) const
{
std::cout << (double)valueFloat;
return true;
}
bool operator()(std::string& valueString ) const
{
std::cout << valueString.c_str ();
return true;
}
};
int main()
{
std::vector< boost::variant< double, std::string >> vec;
vec.push_back((double)1.423423);
vec.push_back(static_cast<std::string>("some text"));
CnVisitorReturn l_VisitorReturn;
for ( int i = 0; i < vec.size (); ++i )
{
bool temp = boost::apply_visitor ( l_VisitorReturn, vec[i] );
}
_getch ();
}
第二个只是一个出勤记录(称为Students
),它只有日期,一封代表现在,缺席或迟到的信,以及某种形式的“外键”:
StudentID | Name | GroupID
实施计划是查询属于某个群组的学生的解析,并查看在所选日期是否已有该群组的“注册”。如果是这样,请使用该数据作为起点,否则它是该组+日期的全新条目。然后用户进行更改并将其保存回解析。
我的问题:
Register
对象插入Date | Present | StudentForeignKey
(例如Students
)还是应该插入StudentID((例如Register
)?我关注的是它是否会影响以后的查询。(目前我已经完成了前一种方法,但认为它可能影响Q2)。myRegister.set("StudentForeignKey", myStudentObject
的所有学生来自myRegister.set("StudentForeignKey", StudentID
以及仅来自{{1}的这些项目} Students
匹配的地方。我是否必须以两个查询的方式执行此操作?所以,第一个查询是:
GroupID
上面给了我所有GroupID = 4的学生。
但是,如何获得Register
匹配的StudentForeignKey
条目(给定日期)? PS:我看到一些旧帖子说匹配指针不起作用......是不是仍然如此?
我不想在var studentlist = Parse.Object.extend("Students");
var query = new Parse.Query(studentlist);
query.equalTo("GroupID", 4);
query.find({...
中包含Register
(理论上,这将允许我过滤那些感兴趣的小组中的学生),因为小组可以改变,所以我想要参加与学生联系。
答案 0 :(得分:0)
我会使用更多课程。我还使用指针(回答第一个问题)和关系(回答第二个问题)。指针在包装器中基本上是ID,以使它们更易于使用。
我实际上是Group
课程。此课程与Student
有关系,因此您可以轻松获取并管理Group
中的所有学生。
Student
类基本上可以保持原样,但它可以指向Group
而不是ID(如果需要它,或者它有助于其他导航)。
Register
课程我会指向Group
和日期,但我会给它与AttendanceRecord
课程的关系。 Register
还可以保存有关任何相关内容的其他详细信息,例如谁在该日期登记。
AttendanceRecord
是一个简单的排序规则类,它包含出勤状态和指向Student
的指针。
通过这种方式,您可以轻松地从一个组导航到学生。给定一个组,您可以在给定日期轻松获取该组的寄存器。从注册表中,您可以轻松获取所有学生的所有出席情况(另请参阅查询中的include
)。
登记册形成了所发生事件的历史记录。每次新注册时,它都会使用相关组的学生。随着组随时间的变化,寄存器将反映出这一点。
Parse确实提供了一个Parse.Object.saveAll
函数,可用于保存一组对象。在使用关系时需要小心,因为在将对象添加到关系之前需要存在对象,然后保存关系。