小编Nel*_*ira的帖子

在关系数据库中存储事件发生的星期几的最佳方法是什么?

我们正在为学校编写记录管理产品,其中一项要求是能够管理课程安排.我没有看过我们如何处理这个问题的代码(我现在正处于一个不同的项目中),但是我开始想知道如何最好地处理这个要求的一个特定部分,即如何处理这个事实每个课程可以在一周中的一天或多天举行,以及如何最好地将这些信息存储在数据库中.为了提供一些上下文,一个简单的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在这个(人为的)例子中处理专栏的最佳方法是什么?我遇到的问题是,这是一个多值领域:也就是说,你可以在一周中的任何一天开设一门课程,并且可以在一天以上的时间内完成相同的课程.我知道某些数据库本身支持多值列,但假设数据库本身不支持它,是否有"最佳实践"来处理这个问题?

到目前为止,我已经提出了以下可能的解决方案,但我想知道是否有人有更好的方法:

可能的解决方案#1:将DaysOfWeek视为一个位字段

这是我头脑中的第一件事(我不确定这是不是一件好事......).在此解决方案中,DaysOfWeek将被定义为一个字节,前7位将用于表示星期几(每天一位).1位表示在一周的相应日期举行了一个班级.

优点:易于实现(应用程序可以处理位操作),适用于任何数据库.

缺点:更难编写使用该DaysOfWeek列的查询(尽管您可以在应用程序级别处理此问题,或者在数据库中创建视图和存储过程以简化此操作),从而破坏关系数据库模型.

可能的解决方案#2:将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'.

优点:更容易处理查询(即您可以使用 …

sql database-design

36
推荐指数
4
解决办法
2万
查看次数

将 Symfony 4.3.9 升级到 4.4.1/5.0 后的弃用警告

我有一个免弃用的 Symfony 3.4.9 安装。所以我把固件升级到了4.1.1。现在我收到了 9 个来自供应商库的弃用警告:

  • 创建 Doctrine\ORM\Mapping\UnderscoreNamingStrategy 而不让它知道数字已被弃用,并将在 Doctrine ORM 3.0 中删除。
  • “Symfony\Component\HttpKernel\EventListener\ExceptionListener”类自 Symfony 4.4 起已被弃用,请改用“ErrorListener”。
  • Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory 类自 Doctrine/persistence 1.3 以来已被弃用,并将在 2.0 中删除。使用 \Doctrine\Persistence\Mapping\AbstractClassMetadataFactory 代替。
  • Doctrine\Common\Persistence\Mapping\RuntimeReflectionService 类自学说/持久性 1.3 以来已被弃用,并将在 2.0 中删除。使用 \Doctrine\Persistence\Mapping\RuntimeReflectionService 代替。
  • Doctrine\Common\Persistence\ObjectManager 类自 Doctrine/persistence 1.3 以来已被弃用,并将在 2.0 中删除。使用 \Doctrine\Persistence\ObjectManager 代替。
  • Doctrine\Common\Persistence\ObjectRepository 类自学说/持久性 1.3 以来已被弃用,并将在 2.0 中删除。使用 \Doctrine\Persistence\ObjectRepository 代替。
  • Doctrine\Common\PropertyChangedListener 类自学说/持久性 1.3 以来已被弃用,并将在 2.0 中删除。使用 \Doctrine\Persistence\PropertyChangedListener 代替。
  • "twig.exception_controller" 配置键在 Symfony 4.4 中已被弃用,将其设置为 "null" 并使用 "framework.error_controller" 配置键代替。(x2)

这是“正常”还是我的 composer.json 文件有问题?我仔细检查过,看不到任何具有任何“固定”设置的依赖项。

我什至删除了完整的供应商文件夹并再次下载,因为我认为可能会留下任何“垃圾”,结果相同。

我的 composer.json 文件:

{
    "type" : "project",
    "license" …
Run Code Online (Sandbox Code Playgroud)

php symfony composer-php

14
推荐指数
1
解决办法
6785
查看次数

在PHP中添加时间间隔的最佳方法是什么?

我想为现有日期增加时间.我有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,这意味着这个时间间隔可能超过一整天.

最好的方法是什么?

php

11
推荐指数
4
解决办法
1万
查看次数

如何伪造 keycloack 调用以在本地开发中使用?

我的公司使用 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)

javascript keycloak angular

11
推荐指数
2
解决办法
2730
查看次数

使用 Prometheus 监控 Angular 前端

我目前正在使用 Prometheus 通过运行状况检查和不同的计数器来监控我的 Java 后端,效果非常好!

但是,我正在努力寻找有关如何对用 Angular (TypeScript) 编写的前端执行相同操作的信息。以前有人做过类似的事情吗?

javascript monitoring typescript prometheus angular

8
推荐指数
1
解决办法
5709
查看次数

如果我在 Chrome 中更改标签页,如何保持实时视频流的播放?

我为我的公司创建并维护了一个视频流网站。其中一个功能是在公司范围内播放实时流。\n有一段时间,我收到一些用户的投诉,称如果他们更改选项卡,流就会停止。\n在花了很长时间才重现该问题之后(请参阅此问题)我发现,无论节能/内存节省选项如何,Chrome 都会停止流以节省电池电量。

\n

我在仅包含以下 HTML 的页面中进行了测试:

\n
<html>\n<body>\n    <video src="<source of the video stream>" controls autoplay></video>\n</body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n

问题仍然存在:如果我在视频开始后更改选项卡并且不返回视频选项卡,在 Chrome 上,音频未静音,视频将在大约 1 分钟后停止,并显示以下消息:

\n
Uncaught (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/\n
Run Code Online (Sandbox Code Playgroud)\n

(错误中的真实网址被缩短,但SO不允许缩短的网址)

\n

然而这在 YouTube 上并没有发生。在 YouTube 中,无论选项卡是否隐藏,视频都会继续播放远远超出此范围的内容。\n因此,我检查了正在播放的 YouTube 视频,发现它们每隔几秒调用一个如下 URL:

\n

https://rr1---sn-cgpn5oxu-4vge.googlevideo.com/videoplayback?expire=1683149353&ei=yH1SZJ7WO5uZ1sQP9vG92A8&ip=2804:29b8:517b:242:f26b:4dea:b5f2:67e3&id=o-AL8joEvI3HBPbkl hxiLbEGTDlJLbVIwopjFjnI8EBWL-&itag=397&aitags= 133,134,135,136,160,242,243,244,247,278,298,299,302,303,394,395,396,397,398,399&来源=youtube&requiressl=是&mh=WP&mm=31,29&mn=sn-cgpn5oxu-4vge ,sn-bg07dnrd&ms=au,rdu&mv=m&mvi=1&pl=48&gcr=br&initcwndbps=1168750&spc=qEK7B7KNEwbBCyLfMnbqJ_XwT66_vLSzP7Ms6zWibaE_f8dM91zGy5o&vprv=1&mime=视频/mp4&ns=55HuND VyUV7osCrE3I51qpQN&gir=yes&clen=487564749&dur =22246.495&lmt=1682304313621272&mt=1683127276&fvip=1&keepalive=yes&fexp=24007246&c=WEB&txp=5537434&n=x1PQMe-oM9FwmA&sparams=过期,ei,ip,id,aitags,来源,要求l、gcr、spc、vprv、mime、ns、gir、clen、 dur,lmt&sig=AOq0QJ8wRgIhAN8zD5iU6PeRR6JsQcSG90FY9PU8jYKkchcXkvUPMK9RAiEAkI1CXqLYWok7AaN6IVvv1MPxlt53V3e6cMPchpz6YhU=&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps &lsig=AG3C_xAwRQIhAPjdR3ouyfr-2klgbHhachH67vnoxdmXGhnPNgJTfbv4AiB8kWrG-NC7M_vfTNCPk4zBL9sEGYq9rXXd3j6lCDttgg==&alr=是&cpn=3W-CuvJhKCQ-2SIu&cver=2.20230502 .01.00&范围=3996400-4138492&rn= 72&rbuf=118597&pot=MpUBSMpK29kR-RxI8hTT3gKbBSbNMHgH-lokRzwa-an54N4h5GSRq35j2kF-j5guj3En63V9l3yw3CE4oMW6UYmGzRGQSuNi8nv12fRkDRarshgOfk8_0_-uYxPw4UO 6dQKBtBGPKXWgms989N_Bxl54mPPUxPYIhIIwqv4KbyMuqiGJ6F1TicguIpYMXykFnSVYjgi2WQU=

\n

所以我认为答案是频繁调用后端。由于我的系统也经常调用后端来保存统计数据,所以我想我只需要更新调用的频率。

\n

它没有\xc2\xb4 工作。即使后端调用的频率为 2 秒也不行。视频在大约 1 分钟后继续停止。

\n

那么... YouTube 的秘密是什么?为什么他们的视频一分钟后就停止了,而我的视频却停止了?我需要做什么才能保持视频播放并避免出现该消息? …

javascript youtube video streaming angular

8
推荐指数
1
解决办法
1597
查看次数

我可以在构建时更改Form Class操作吗?

在表单上,​​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形式类的等价物吗?

php symfony symfony-2.3

7
推荐指数
1
解决办法
1万
查看次数

在学说中命名索引和外键?

我对我的一个实体有以下关系:

* @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 的东西

php doctrine symfony

6
推荐指数
1
解决办法
3464
查看次数

在Symfony 2表单上为"非映射实体字段"设置默认值

我有一个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)

请注意,它是一个非映射字段.

php symfony

6
推荐指数
1
解决办法
3234
查看次数

Doctrine是实体中的可删除方法

我的数据库中有一个实体(比如成员),它与其他表有很多关系(准确地说是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 symfony doctrine-orm twig

6
推荐指数
1
解决办法
214
查看次数