解析 - 考勤登记 - 有助于使框架正确

时间:2015-11-24 09:15:46

标签: parse-platform schema

我是新手解析,我正在尝试使用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

实施计划是查询属于某个群组的学生的解析,并查看在所选日期是否已有该群组的“注册”。如果是这样,请使用该数据作为起点,否则它是该组+日期的全新条目。然后用户进行更改并将其保存回解析。

我的问题:

  1. 对于'外键',我应该将Register对象插入Date | Present | StudentForeignKey (例如Students)还是应该插入StudentID((例如Register)?我关注的是它是否会影响以后的查询。(目前我已经完成了前一种方法,但认为它可能影响Q2)。
  2. This is how the Register looks

    1. 我不清楚如何让来自myRegister.set("StudentForeignKey", myStudentObject所有学生来自myRegister.set("StudentForeignKey", StudentID以及来自{{1}的这些项目} Students匹配的地方。我是否必须以两个查询的方式执行此操作?
    2. 所以,第一个查询是:

      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(理论上,这将允许我过滤那些感兴趣的小组中的学生),因为小组可以改变,所以我想要参加与学生联系。

      1. 最后,目的是让用户点击保存按钮以保存所做的所有更改。在我看来,我将其视为存储在数据库中的“数组”值(新项目或对现有项目的更改)。有没有办法一次性完成此更新(有点像MS Access中的更新查询)?

1 个答案:

答案 0 :(得分:0)

我会使用更多课程。我还使用指针(回答第一个问题)和关系(回答第二个问题)。指针在包装器中基本上是ID,以使它们更易于使用。

我实际上是Group课程。此课程与Student有关系,因此您可以轻松获取并管理Group中的所有学生。

Student类基本上可以保持原样,但它可以指向Group而不是ID(如果需要它,或者它有助于其他导航)。

Register课程我会指向Group和日期,但我会给它与AttendanceRecord课程的关系。 Register还可以保存有关任何相关内容的其他详细信息,例如谁在该日期登记。

AttendanceRecord是一个简单的排序规则类,它包含出勤状态和指向Student的指针。

通过这种方式,您可以轻松地从一个组导航到学生。给定一个组,您可以在给定日期轻松获取该组的寄存器。从注册表中,您可以轻松获取所有学生的所有出席情况(另请参阅查询中的include)。

登记册形成了所发生事件的历史记录。每次新注册时,它都会使用相关组的学生。随着组随时间的变化,寄存器将反映出这一点。

Parse确实提供了一个Parse.Object.saveAll函数,可用于保存一组对象。在使用关系时需要小心,因为在将对象添加到关系之前需要存在对象,然后保存关系。