我们正在为学校编写记录管理产品,其中一项要求是能够管理课程安排.我没有看过我们如何处理这个问题的代码(我现在正处于一个不同的项目中),但是我开始想知道如何最好地处理这个要求的一个特定部分,即如何处理这个事实每个课程可以在一周中的一天或多天举行,以及如何最好地将这些信息存储在数据库中.为了提供一些上下文,一个简单的Course表可能包含以下列:
Course Example Data
------ ------------
DeptPrefix ;MATH, ENG, CS, ...
Number ;101, 300, 450, ...
Title ;Algebra, Shakespeare, Advanced Data Structures, ...
Description ;...
DaysOfWeek ;Monday, Tuesday-Thursday, ...
StartTime
EndTime
Run Code Online (Sandbox Code Playgroud)
我想知道的是,DaysOfWeek在这个(人为的)例子中处理专栏的最佳方法是什么?我遇到的问题是,这是一个多值领域:也就是说,你可以在一周中的任何一天开设一门课程,并且可以在一天以上的时间内完成相同的课程.我知道某些数据库本身支持多值列,但假设数据库本身不支持它,是否有"最佳实践"来处理这个问题?
到目前为止,我已经提出了以下可能的解决方案,但我想知道是否有人有更好的方法:
这是我头脑中的第一件事(我不确定这是不是一件好事......).在此解决方案中,DaysOfWeek将被定义为一个字节,前7位将用于表示星期几(每天一位).1位表示在一周的相应日期举行了一个班级.
优点:易于实现(应用程序可以处理位操作),适用于任何数据库.
缺点:更难编写使用该DaysOfWeek列的查询(尽管您可以在应用程序级别处理此问题,或者在数据库中创建视图和存储过程以简化此操作),从而破坏关系数据库模型.
这与使用位字段的方法基本相同,但不是处理原始位,而是为一周中的每一天分配一个唯一的字母,该DaysOfWeek列只存储一系列字母,指示课程的持续日期.例如,您可以将每个工作日与单字符代码关联,如下所示:
Weekday Letter
------- ------
Sunday S
Monday M
Tuesday T
Wednesday W
Thursday R
Friday F
Saturday U
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当然举行周一,周二和周五将有具有价值'MTF'的DaysOfWeek,而只有在周三召开班会拥有DaysOfWeek的价值'W'.
优点:更容易处理查询(即您可以使用 …
我有一个免弃用的 Symfony 3.4.9 安装。所以我把固件升级到了4.1.1。现在我收到了 9 个来自供应商库的弃用警告:
这是“正常”还是我的 composer.json 文件有问题?我仔细检查过,看不到任何具有任何“固定”设置的依赖项。
我什至删除了完整的供应商文件夹并再次下载,因为我认为可能会留下任何“垃圾”,结果相同。
我的 composer.json 文件:
{
"type" : "project",
"license" …Run Code Online (Sandbox Code Playgroud) 我想为现有日期增加时间.我有2个字符串变量:
$date = "2013-01-05 10:55:15";
$interval = "50:25:10";
Run Code Online (Sandbox Code Playgroud)
我想计算最终日期"2013-01-07 13:20:25".小时数可以大于23,这意味着这个时间间隔可能超过一整天.
最好的方法是什么?
我的公司使用 Keycloak 进行与 LDAP 连接的身份验证并返回一个填充了公司数据的用户对象。然而,在此期间,我们都在家工作,在我的日常工作中,每次重新加载应用程序时都必须在我的公司服务器中进行身份验证,这已被证明是一项昂贵的开销。尤其是间歇性的互联网连接。
如何伪造 Keycloak 调用并使 keycloak.protect() 成功运行?
我可以在我的机器上安装一个 Keyclock 服务器,但我宁愿不这样做,因为除了 vagrant VM、Postgres 服务器、be 服务器以及我保持打开的所有其他东西之外,它还会是另一台服务器在其中运行。最好进行模拟调用并返回固定的硬编码对象。
我的项目的 app-init.ts 是这样的:
import { KeycloakService } from 'keycloak-angular';
import { KeycloakUser } from './shared/models/keycloakUser';
<...>
export function initializer(
keycloak: KeycloakService,
<...>
): () => Promise<any> {
return (): Promise<any> => {
return new Promise(async (res, rej) => {
<...>
await keycloak.init({
config: environment.keycloakConfig,
initOptions: {
onLoad: 'login-required',
// onLoad: 'check-sso',
checkLoginIframe: false
},
bearerExcludedUrls: [],
loadUserProfileAtStartUp: false
}).then((authenticated: boolean) => {
if …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Prometheus 通过运行状况检查和不同的计数器来监控我的 Java 后端,效果非常好!
但是,我正在努力寻找有关如何对用 Angular (TypeScript) 编写的前端执行相同操作的信息。以前有人做过类似的事情吗?
我为我的公司创建并维护了一个视频流网站。其中一个功能是在公司范围内播放实时流。\n有一段时间,我收到一些用户的投诉,称如果他们更改选项卡,流就会停止。\n在花了很长时间才重现该问题之后(请参阅此问题)我发现,无论节能/内存节省选项如何,Chrome 都会停止流以节省电池电量。
\n我在仅包含以下 HTML 的页面中进行了测试:
\n<html>\n<body>\n <video src="<source of the video stream>" controls autoplay></video>\n</body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n问题仍然存在:如果我在视频开始后更改选项卡并且不返回视频选项卡,在 Chrome 上,音频未静音,视频将在大约 1 分钟后停止,并显示以下消息:
\nUncaught (in promise) DOMException: The play() request was interrupted because \nvideo-only background media was paused to save power. \nhttps://developer.chrome.com/blog/play-request-was-interrupted/\nRun Code Online (Sandbox Code Playgroud)\n(错误中的真实网址被缩短,但SO不允许缩短的网址)
\n然而这在 YouTube 上并没有发生。在 YouTube 中,无论选项卡是否隐藏,视频都会继续播放远远超出此范围的内容。\n因此,我检查了正在播放的 YouTube 视频,发现它们每隔几秒调用一个如下 URL:
\n\n所以我认为答案是频繁调用后端。由于我的系统也经常调用后端来保存统计数据,所以我想我只需要更新调用的频率。
\n它没有\xc2\xb4 工作。即使后端调用的频率为 2 秒也不行。视频在大约 1 分钟后继续停止。
\n那么... YouTube 的秘密是什么?为什么他们的视频一分钟后就停止了,而我的视频却停止了?我需要做什么才能保持视频播放并避免出现该消息? …
在表单上,classe的buildForm方法(AbstractType派生)可以设置该表单的操作吗?我想要做的是类似于setAction构建嵌入表单时可以使用的方法:
$form = $this->createFormBuilder()
->setAction($this->generateUrl('my_action'))
->add('field', 'text')
->add('button', 'submit');
Run Code Online (Sandbox Code Playgroud)
我的意思是,是setAction形式类的等价物吗?
我对我的一个实体有以下关系:
* @ORM\ManyToMany(targetEntity="contract")
* @ORM\JoinTable(name="contract_client",
* joinColumns={@ORM\JoinColumn(name="id_client", referencedColumnName="id_client")},
* inverseJoinColumns={@ORM\JoinColumn(name="id_contract", referencedColumnName="id_contract")}
Run Code Online (Sandbox Code Playgroud)
应用程序/控制台原则:架构:更新正在为外键和索引生成 FK_29A5BB4736B289B6 和 IDX_29A5BB4736B289B6 之类的名称。
有没有办法指定这些索引/约束的名称?我想要类似 fk_contract_client_client 的东西
我有一个Form类,其中包含一个非映射的实体字段:
->add('client', 'entity', array(
'class' => 'MyBundle:Client',
'property' => 'name',
'empty_value' => 'Select...',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.name', 'ASC');
},
'mapped' => false,
))
Run Code Online (Sandbox Code Playgroud)
我创建的像这样:
$form = $this->createForm(new MyType(),
$entity,
array('action' => $this->generateUrl('my_action'))
);
Run Code Online (Sandbox Code Playgroud)
如何设置默认值?试过这个,但没有奏效:
'data' => 23423, // id in table
'data' => 'Client name'
$form->setDefault('client', 'Client name'); // in controller
Run Code Online (Sandbox Code Playgroud)
请注意,它是一个非映射字段.
我的数据库中有一个实体(比如成员),它与其他表有很多关系(准确地说是6个关系).其中一些我不想用ORM映射(我的意思是链接到这个实体),因为它们可能有很多记录(例如像MemberAccessLogs),还有一些其他实体加载它们.
现在我想要这个成员实体有一个isDeletable方法,所以我可以在管理页面中禁用排除按钮.
如果我以传统的方式执行此操作,我将必须声明与实体类中的所有其他表的关联,包括MemberAccessLogs,我会将该方法放入其中,以便我可以测试这些关联是否为空.
但是AFAIU,我必须对关联表进行一次获取(或至少一次计数),以便检查是否为空.
另一种方法是获取我想要显示的成员,然后进行单独的查询以检查这些子表中是否存在低成本(从表限制1中选择*)为空,然后在通过之前以编程方式填充成员中的isDeletable方法它到Twig.
但我发现这个解决方案很麻烦.谁有更好的方法来做到这一点?
仅供记录:有些人可能认为这是"过早优化".我保持(与某些人相反),你在编程时应该提前考虑,不要这样做这很糟糕.但我真的认为这不是讨论它的地方.请让我们专注于问的问题好吗?:)
编辑
为了轻松证明限制1比计数快得多,我在数据库中的表中进行了一次小测试,该表有超过2000万行.结果如下:
select count(*) from loga [20 million+ table]
20678473
1 row(s) fetched - 27023ms
select exists(select null from loga limit 1)
true
1 row(s) fetched - 2ms
Run Code Online (Sandbox Code Playgroud)
我猜13511,5倍的速度足够确凿.:d
php ×6
symfony ×5
angular ×3
javascript ×3
composer-php ×1
doctrine ×1
doctrine-orm ×1
keycloak ×1
monitoring ×1
prometheus ×1
sql ×1
streaming ×1
symfony-2.3 ×1
twig ×1
typescript ×1
video ×1
youtube ×1