创建通用关联,其中第一个实体(例如,类别)可以多次用于其他对象(例如,帖子,文章)
例
帖子有类别,文章有类别,但文章和帖子是完全不同的实体.(两者不能同时连接)
岗位
<?php
/** @Entity */
class Post
{
// ...
/**
* @ManyToMany(targetEntity="Category")
* @JoinTable(name="post_categories",
* joinColumns={@JoinColumn(name="post_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
* )
*/
private $categories;
public function __construct()
{
$this->categories= new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
文章
<?php
/** @Entity */
class Article
{
// ...
/**
* @ManyToMany(targetEntity="Category")
* @JoinTable(name="article_categories",
* joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
* )
*/
private $categories;
public function __construct()
{
$this->categories= new …Run Code Online (Sandbox Code Playgroud) 我对Wordpress Taxonomies有点问题......下面你可以看到我的自定义分类法的初始化命名job_keywords.
function register_job_keywords() {
$labels = array(
[... lables here ...]
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'job_keywords', array( 'job' ), $args );
}
Run Code Online (Sandbox Code Playgroud)
我也将它实现为自定义帖子类型job.
$args = array(
[...]
'taxonomies' => array( 'job_category' , 'job_keywords'),
'hierarchical' => false,
[...]
Run Code Online (Sandbox Code Playgroud)
在插件初始化我调用函数register_job_keywords(),它让我看到wp-admin中的关键字,我可以像标签等一样添加它们.所以一切正常在界面,我去我的PHP文件,并显示所有的分类.所以我得到了这个:
Array
(
[category] => …Run Code Online (Sandbox Code Playgroud) 简短而简单的问题:
如何判断 Doctrine PHPEntity对象是新的?
新的-我的意思是不在数据库中并且它不是“更新”操作。最重要的是 - 我需要在没有任何查询的情况下检查它的方法,例如:
$manager->findOne($something);
Run Code Online (Sandbox Code Playgroud)
实际上有时我尝试检查“ID 是否为空”,但我不能 100% 确定这个方法是否有效。以及这个问题的其他提示或可能的核心 - 我看到了类似的东西:
$manager->getUnitOfWork()->isInIdentityMap($object);
Run Code Online (Sandbox Code Playgroud)
看起来不错,但我找不到实际的功能isInIdentityMap。如果它被保留或删除,这是真的吗?这个函数什么时候说 true 和 false?
//EDIT
我需要检测第一次创建的实体对象- 仅存在于 php 中,但不存在于数据库中。当然,从数据库加载实体以应用更新对我来说并不新鲜 - 例如:
当您创建Comment对象时,您需要递增commentCounter,但仅当您第一次刷新此注释时才应递增。您不想在更新或删除现有评论时增加它。如何检查评论是新的并且计数器应该增加。
请在答案中解释为什么你的方法好/更好