Php 在Sumfony 2.5中创建多个一对一关系
我对Symfony很陌生,所以如果这听起来很愚蠢,我会提前道歉,如果有人能纠正我的理解,我会非常感激 我正在阅读,在阅读的过程中,我想为什么不创建一个虚拟博客应用程序来练习呢 我正在开发的虚拟博客应用程序非常简单,只有三个表及其实体Php 在Sumfony 2.5中创建多个一对一关系,php,symfony,doctrine-orm,symfony-2.5,Php,Symfony,Doctrine Orm,Symfony 2.5,我对Symfony很陌生,所以如果这听起来很愚蠢,我会提前道歉,如果有人能纠正我的理解,我会非常感激 我正在阅读,在阅读的过程中,我想为什么不创建一个虚拟博客应用程序来练习呢 我正在开发的虚拟博客应用程序非常简单,只有三个表及其实体 post(博客帖子的位置)它的实体是Entity/post.php 评论(发表评论的地方)它的实体是Entity/comments.php category(帖子分类的位置)它的实体是Entity/category.php 我能够获得帖子/类别/评论,以保存、显
- post(博客帖子的位置)它的
是Entity/post.php实体
- 评论(发表评论的地方)它的
是Entity/comments.php实体
- category(帖子分类的位置)它的
是Entity/category.php实体
问题1,因为帖子也与评论表链接,我需要将同一个帖子表与类别表链接,我们可以在
实体/post.php
中这样做吗
class Post
{
/**
* @ORM\OneToMany(targetEntity="Comments", mappedBy="post")
*/
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="post")
* @ORM\JoinColumn(name="category", referencedColumnName="id")
*/
protected $comment;
protected $categories;
如果不是,那么处理这些关系的正确方法是什么
问题2,在阅读时,“似乎我应该能够通过以下操作获得类别名称
$posts = $this->getDoctrine()->getRepository('BlogBundle:Post')->findBy(array('category' => $id), array('id' => 'DESC'));
$category_name = $posts->getCategory();
但这给了我一个错误
Error: Call to a member function getCategory() on a non-object in
我可以确认getCategory()
方法确实存在于Post
实体中
我非常感谢您的帮助。问题1 注释很好,但您必须将它们写在它们所属的属性的顶部,否则它们将被忽略:
class Post
{
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $comments;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="posts")
* @ORM\JoinColumn(name="category", referencedColumnName="id")
*/
protected $category;
public function __constructor()
{
$this->comments = new ArrayCollection();
}
// ...
}
让舒尔在其他实体中设置正确的对应项:
class Category
{
/**
* @ORM\OneToMany(targetEntity="Post", mappedBy="category")
*/
protected $posts;
public function __constructor()
{
$this->posts = new ArrayCollection();
}
// ...
}
class Comment
{
/**
* @ORM\ManyToOne(targetEntity="Post", inversedBy="comments")
* @ORM\JoinColumn(name="post", referencedColumnName="id")
*/
protected $post;
// ...
}
请注意,我更改了一些单数/复数属性和注释
类名。这样应该更直观
问题2
findBy
返回一个找到的对象数组,即使只找到一个对象。使用findOneBy
或foreach查看结果。感谢您确认注释没有问题,并纠正我它们需要位于属性顶部的错误,我仍然觉得注释有问题,因为我感觉它不正确在连接两个表时,我正在查看mysql,没有看到任何外键集,在设置annotations@Baig我为类别
和评论
添加了类,现在可能更清晰了?谢谢,这解决了问题1的问题,但我仍然不清楚不清楚问题出在哪里2@Baig:现在,您查找所有类别为id$id
(只是为了使舒尔:这不是您的帖子id,对吧)。结果是一个无、一个或多个post
对象的数组。但它始终是一个数组。因此,您也可以选择$posts[0]->getCategory()
或使用findOneBy(…)
,则结果是类对象Post
,而不是数组(或null
,如果查询不匹配)。非常感谢,$posts[0]->getCategory()
很好,我使用的knp paginator似乎与findOneBy
不兼容。