我正在开发PHP / Symfony2 / Doctrine 2中的健身房管理应用程序。 我正在开发约会模块。 约会不能是具有特定event_date的单行(即将发生的日期),因为它每周持续几天,持续数周或数月。 如何通过以日历格式显示约会来设计实体以保持约会的约束,在某个月的每一天我都可以查看当天的约会?
提前谢谢。
答案 0 :(得分:0)
Appointment
实体应该包含ID,描述符,start_date,end_date等信息。需要注意的重要一点是“开始”和“结束”,它会为您的Appointment
提供跨越多天/月的灵活性。
在日历中,如果要显示其开始日期和结束日期介于1月1日到1月7日之间的事件,则它将是以下查询构建器对象:
// In EntityRepository for Appointments
$this->getQueryBuilder('a')
->where('a.startDate BETWEEN :start AND :end')
->andWhere('a.endDate BETWEEN :start AND :end')
->setParameters([
"start" => '2016-01-01',
"end" => '2016-01-07'
])
->getQuery()
->getResult();
如果您只想要一天的事件并在同一天结束,那么您需要做的就是相应地调整参数。
答案 1 :(得分:0)
好的,这是一个好的开始。我认为它填补了你设定的所有限制。我使用了一些复合键,但这是为了简化表格。
由于您设置的约束:“因为它持续数周或数月的每周几天”是错误的查看方式。您必须将约会的每个条目存储在表中(如果您绝对想要它,可以使用xml文件,但最好的方法是使用您正在考虑的mysql)
在这里,您将每个日期存储在C_date表中,然后在Appointment_date中引用它们。这是预约时间。我会mabye已删除C_date并且insted将信息添加到appointment_date。
create table User(
user varchar(32) NOT NULL PRIMARY KEY
);
create table C_date (
c_date DATE NOT NULL PRIMARY KEY
);
create table Appointment(
user varchar(32) NOT NULL,
trainer varchar(32) NOT NULL,
CONSTRAINT FOREIGN KEY(user) REFERENCES User(user),
CONSTRAINT FOREIGN KEY(trainer) REFERENCES User(user),
CONSTRAINT id PRIMARY KEY(user, trainer)
);
create table Appointment_date(
user varchar(32) NOT NULL,
trainer varchar(32) NOT NULL,
app_date DATE NOT NULL COMMENT "The time and date for the appointment",
time TIME NOT NULL,
CONSTRAINT FOREIGN KEY(user, trainer) REFERENCES Appointment(user, trainer),
CONSTRAINT FOREIGN KEY(app_date) REFERENCES C_date(c_date),
CONSTRAINT id PRIMARY KEY(user, trainer, app_date)
);