我尝试收集有关以下方式的一些信息,以便在删除父实体时自动删除子实体.似乎最常见的方法是使用这三个注释:cascade = {"remove"} OR orphanRemoval = true OR ondelete ="CASCADE".
我对第三个问题感到有点困惑:ondelete ="CASCADE",正如关于这个的官方文档中的解释非常稀缺)如果有人能够证实我从我的研究中收集和了解的以下信息,我会很高兴.网和经验......
cascade = {"remove"}
==>当拥有方实体为时,删除反面的实体.即使你与其他拥有的实体有许多不同之处.
- 应该用于集合(所以在OneToMany或ManyToMany关系中)
- 在ORM中实现
orphanRemoval = true
==>当拥有方实体为AND时,将删除反方的实体,并且它不再连接到任何其他拥有方实体.(参考 doctrine official_doc
- ORM中的实现
- 可以与OneToOne,OnetoMany或ManyToMany一起使用
onDelete ="CASCADE"
==>这会将删除级联添加到数据库中的外键列
- 这个策略有点难以实现,但可以非常强大和快速.(参见 doctrine official_doc ......但还没有阅读更多解释)
- ORM必须做的工作少(与之前的两种做法相比),因此应该有更好的表现.
其他信息
- 所有这三种方式都在双向关系实体实现(右???)
- 使用cascade = {"remove"}完全绕过任何外键onDelete = CASCADE.(参见doctrine_official_doc)
级联= { "去除"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", …Run Code Online (Sandbox Code Playgroud) 到目前为止,我从一些控制器获取缓存目录.但是,由于我想在特定服务中设置它,我想知道从服务访问它应该做哪些依赖注入.
当然我可以注入容器(我在下面作为例子安排),但我想我可以使用一些更具特色的依赖注入.
到目前为止我的代码在我的服务中
class mycache
{
private $container;
public function __construct($container){
$this->container = $container;
}
public function transf($text, $code)
{
$filename = $this->container->getParameter('kernel.cache_dir') . '/MyCACHE/langue.txt';
}
}
Run Code Online (Sandbox Code Playgroud)
//服务配置
service
cache_langue:
class: MySite\BlogBundle\Services\mycache
arguments: ["@service_container"]
Run Code Online (Sandbox Code Playgroud) 我有一个父实体类别和一个子实体文章.它们由ManyToMany关系定义.一篇文章可以在一个或多个类别中进行分类,每个类别可以在多个文章中进行标记.
我想做什么我
希望当我删除一个类别时,类别中标记的每个文章也被删除但是只有当它们没有被其他类别标记时.
我已经测试了什么我
测试了2类(id = 1和id = 2)和两篇文章(id = 71和id = 91).第71条同时具有第1类和第2类.第91条仅与第2类相关联.
因此,在删除第2 类时,我希望删除第91条而不删除第71条(因为这一条仍然与第1类相关)
但是,无论我尝试过什么,这都不会发生......
在下面的图片中,我总结了使用不同策略得到的结果(1/cascade = {"remove"},2/orphanRemoval = true和3/ondelete ="CASCADE").
以绿色从数据库中删除.

我的代码(部分代码)
在控制器中
public function deleteCategory(Category $category)
{
$em = $this->getDoctrine()->getManager();
$em->remove($category);
$em->flush();
}
Run Code Online (Sandbox Code Playgroud)
for strategy 1/cascade = {"remove"}
// IN CLASS/ENTITY CATEGORY - OWNER OF THE RELATION
* @ORM\ManyToMany(targetEntity="Article", inversedBy="categories", cascade={ "remove"})
private $articles;
// IN CLASS/ENTITY ARTICLE
* @ORM\ManyToMany(targetEntity="Category", mappedBy="articles")
private $categories;
Run Code Online (Sandbox Code Playgroud)
对于策略2/orphanRemoval = true
// IN CLASS/ENTITY CATEGORY - OWNER …Run Code Online (Sandbox Code Playgroud) 我想知道我的表TABLE中的行数和属性名称="joe"
这里到目前为止我使用的代码,但我检索对象(这是不必要的,所以没有优化)
$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:TABLE');
$name = "joe";
$liste = $repository->findBy(array('name' => $name));
$nombre = count($liste);
Run Code Online (Sandbox Code Playgroud)
如何使用countbuilder使用count实现它?需要设置参数$ name.到目前为止我所看到的都没有像这样的参数,所以不知道它是如何工作的......(而且我想避免使用paginator)
谢谢.
我想在点击元素时打开一个框...然后当我点击"关闭"按钮时让它消失...但这不起作用.该框确实通过使用"display:block"出现,但它不会随着"display:none"而消失(参见随附的代码)
(我也尝试使用带有css attribut的类的addClass和removeClass,例如display:none但是也没有用.)
<html>
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<style>
div.back {
float: left;
background-color: grey;
width:100px;
height:100px;
margin:10px;
padding:10px;
}
.window {
display: none;
position: fixed;
top: 150px;
left: 150px;
width:150px;
height:100px;
background-color:blue;
}
</style>
<script>
$(document).ready(function(){
$(".back").click(function(){
$(".window").css("display","block");
});
$(".btn_validate").click(function(){
$(".window").css("display","none");
});
});
</script>
</head>
<body>
<div class="back">
Some text
<div id="draggable" class="window">
<input type="button" value="CLOSE" class="btn_validate"/>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我无法通过终端使用 Symfony 创建数据库
(我使用 MAC 和 MAMP)
终端中的线路
MacBook-Pro-de-XXX:Symfony XXX$ php app/console doctrine:database:create
Run Code Online (Sandbox Code Playgroud)
我在终端得到的答案
Warning: PDO::__construct(): MySQL server has gone away in /Applications/MAMP/htdocs/Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 40
Warning: PDO::__construct(): Error while reading greeting packet. PID=52773 in /Applications/MAMP/htdocs/Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 40
Could not create database for connection named `symfony`
SQLSTATE[HY000] [2006] MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)
这里有一些其他信息可能会帮助您帮助我找到问题的来源
Symfony/app/config 中的 parameters.yml 文件
# This file is auto-generated during the composer install
parameters:
database_driver: pdo_mysql
database_host: localhost:8888
database_port: null
database_name: symfony
database_user: root
database_password: …Run Code Online (Sandbox Code Playgroud)