我是Doctrine的新手,对我来说还有一些模糊的区域.在这种情况下,我使用循环和实体管理器在数据库中插入新记录.它工作正常,但我注意到Doctrine按实体进行一次插入查询,这可能会变得非常庞大.
使用Doctrine2和Symfony 2.3,我想知道如何设置它,这样它只会产生一个带有所有值的插入查询(当然我们只讨论1个实体).
我的意思是改变这个:
INSERT INTO dummy_table VALUES (x1, y1)
INSERT INTO dummy_table VALUES (x2, y2)
Run Code Online (Sandbox Code Playgroud)
成
INSERT INTO dummy_table VALUES (x1, y1), (x2, y2)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
$em = $this->container->get('doctrine')->getManager();
foreach($items as $item){
$newItem = new Product($item['datas']);
$em->persist($newItem);
}
$em->flush();
Run Code Online (Sandbox Code Playgroud) 我的表中有一列,我DECIMAL(19,4)正在为项目创建实体,定义这个字段的正确方法是什么?什么精度和规模的参数意味着主义注解?
我想问一下,在Symfony2中使用前端和后端构建项目的最佳方法是什么?在Symfony的其他版本中,这很容易实现,因为您可以创建两个应用程序 - 前端和后端 - 然后所有库/模型将在这些应用程序之间共享.
现在在Symfony2中,一切都是捆绑.对我来说不太清楚的是我怎么能代表"两个"应用程序,前端和后端.我应该创建两个名称空间 - 前端和后端吗?我想将我的实体放在一个地方,而不是从两个应用程序访问它们.
我有一个与其他一些实体相关的实体.最后,我有一个像tat的对象:
paper.submission.authors
Run Code Online (Sandbox Code Playgroud)
对于某些paper.submission,没有作者,在我的twig模板中,我正在做:
{% for author in paper.submission.authors}
do something
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
对于没有作者的paper.submission,我得到"未找到实体"异常.
你是否有可能在我的for循环之前测试对象是否存在.
我已经尝试了定义,它总是如此.然后,我尝试过不是null,但这也是生成异常.
非常感谢你提前.
在项目上工作,我只是发出一个AJAX请求来处理一些数据.
完成作业后,服务器将返回HTTP 205 RESET CONTENT响应
我使用此状态代码告诉请求者重置文档视图
这是我使用的代码片段
$.ajax({
url: '/unread',
method: 'PUT',
data: {
notifications: elements
}
}).done(function(content, message, xhr) {
if (205 !== xhr.status) {
// Generic error message
return;
}
window.location.reload(true)
}).fail(function() {
// Generic error message
})
Run Code Online (Sandbox Code Playgroud)
这适用于Internet Explorer (8及以上版本),Firefox (28.0)和Opera (12.16).但是Chrome (33.0)和Opera (20.0)不是刷新页面,而是在调用时下载正在重新加载dump的页面的响应内容window.location.reload
这是我尝试过的
window.location.href = window.location.href 给出相同的结果history.go(0) 给出相同的结果window.location.reload,则不会重新加载任何内容这是正在发生的事情的视觉网络

附加信息(以及更深入的调查)
在使用相同数据库的几个项目上,我们制作了一个Symfony2 Bundle来映射所有常见功能.
现在的问题是我们有第二个数据库,我们需要相同类型的服务,就像第一个一样.
config.yml
doctrine:
dbal:
default_connection: main
connections:
main:
/* ... */
sub:
/* ... */
orm:
default_entity_manager: main
entity_managers:
main:
connection: main
mappings:
AcmeMainBundle: ~
sub:
connection: sub
mappings:
AcmeSubBundle: ~
auto_generate_proxy_classes: %kernel.debug%
Run Code Online (Sandbox Code Playgroud)
@AcmeMainBundle > services.yml
services:
mainmanager:
class: Acme\MainBundle\MainManager
arguments: [ @doctrine.orm.entity_manager ]
Run Code Online (Sandbox Code Playgroud)
Acme\MainBundle\MainManager
class MainManager
{
public function __construct(EntityManager $em)
{
$em->getRepository('AcmeMainBundle:Foo');
}
}
Run Code Online (Sandbox Code Playgroud)
这个设置工作正常,我得到所有预期的结果,因为default_entity_manager设置为main正确的EntityManager.
但现在这是问题所在.
@AcmeSubBundle > services.yml
submanager:
class: Acme\SubBundle\SubManager
arguments: [ @doctrine.orm.entity_manager ]
Run Code Online (Sandbox Code Playgroud)
Acme\SubBundle\SubManager
class SubManager
{
public function …Run Code Online (Sandbox Code Playgroud) 我刚刚发现了SensioLabsInsight,并发现了有关如何编写优秀代码的非常有趣的提示.如果对于为什么(或者为什么不)应该使用某些东西有一些解释,那就太好了 - 即使对于像exit和等的基本东西也是如此die.这将有助于我向与我合作的人解释事情.
所以我的问题是针对AccessDeniedHttpException - 它说:
Symfony应用程序不应抛出AccessDeniedHttpException
那么如何从应用程序控制器或EventListener返回403 Forbidden?
什么是最佳做法?
说实话,我以为会是
throw new AccessDeniedHttpException()
Run Code Online (Sandbox Code Playgroud)
因为404你有
throw $this->createNotFoundException()
Run Code Online (Sandbox Code Playgroud)
但看起来我错了.
什么时候应该创建一些功能作为过滤器而不是功能,反之亦然?
user | function
Run Code Online (Sandbox Code Playgroud)
VS
function(user)
Run Code Online (Sandbox Code Playgroud)
有人指出文档,但它没有解释何时使用哪个.它确实这样说:
函数支持与过滤器相同的功能,但pre_escape和preserves_safety选项除外.
如果枝条支撑功能就像过滤器一样,它的作用是什么?
我参与了从右到左的问题.我通过单击按钮上的"隐藏"和"可见"布局创建它.但是现在我想要一个动画,这样当我点击按钮时,会发生"从右到左"的动画,当我再次点击按钮时,相同的布局将是"从左到右"的动画,并作为幻灯片布局.
码
final RelativeLayout rightlayout = (RelativeLayout) findViewById(R.id.relativelayout2);
rightlayout.setVisibility(View.GONE);
Button rightbtn = (Button) findViewById(R.id.righttoleft);
rightbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("clickecd");
if(keyright == 0) {
//rightlayout.setVisibility(View.VISIBLE);
keyright++;
slideToLeft(rightlayout);
} else
{
//rightlayout.setVisibility(View.GONE);
TranslateAnimation animate = new TranslateAnimation(0,rightlayout.getWidth(),0,0);
animate.setDuration(1000);
animate.setFillAfter(true);
rightlayout.startAnimation(animate);
keyright--;
}
}
});
// To animate view slide out from left to right
public void slideToRight(View view){
TranslateAnimation animate = new TranslateAnimation(0,view.getWidth(),0,0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
}
// To animate view slide out from right to left …Run Code Online (Sandbox Code Playgroud)