草庐IT

php - symfony 2 多对多关系的固定装置

coder 2024-04-11 原文

如何在多对多关系中为 symfony 2 设置固定装置, 以下 2 个实体由命令行创建, 然后为多对多关系添加一些行

实体 1:博客类

<?php

namespace Acme\MainBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Blog
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\MainBundle\Entity\BlogRepository")
*/
 class Blog {

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="tag", inversedBy="blogs")
 * @ORM\JoinTable(name="blog_tag",
 *      joinColumns={@ORM\JoinColumn(name="blog_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 *      )
 **/
protected $tags;

public function __construct()
{
    $this->tags = new ArrayCollection();
}


/**
 * @var string
 *
 * @ORM\Column(name="title", type="string", length=255)
 */
private $title;

/**
 * @var string
 *
 * @ORM\Column(name="subTitle", type="text")
 */
private $subTitle;

/**
 * @var string
 *
 * @ORM\Column(name="author", type="string", length=255)
 */

private $author;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="createdAt", type="datetime")
 */
private $createdAt;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="updatedAt", type="datetime")
 */
private $updatedAt;

/**
 * @var string
 *
 * @ORM\Column(name="content", type="text")
 */
private $content;

/**
 * @var boolean
 *
 * @ORM\Column(name="isPublished", type="boolean")
 */
private $isPublished;

/**
 * Get id
 *
 * @return integer 
 */
public function getId() {
    return $this->id;
}

/**
 * Set title
 *
 * @param string $title
 * @return Blog
 */
public function setTitle($title) {
    $this->title = $title;

    return $this;
}

/**
 * Get title
 *
 * @return string 
 */
public function getTitle() {
    return $this->title;
}

/**
 * Set author
 *
 * @param string $author
 * @return Blog
 */
public function setAuthor($author) {
    $this->author = $author;

    return $this;
}

/**
 * Get author
 *
 * @return string 
 */
public function getAuthor() {
    return $this->author;
}

/**
 * Set createdAt
 *
 * @param \DateTime $createdAt
 * @return Blog
 */
public function setCreatedAt($createdAt) {
    $this->createdAt = $createdAt;

    return $this;
}

/**
 * Get createdAt
 *
 * @return \DateTime 
 */
public function getCreatedAt() {
    return $this->createdAt;
}

/**
 * Set updatedAt
 *
 * @param \DateTime $updatedAt
 * @return Blog
 */
public function setUpdatedAt($updatedAt) {
    $this->updatedAt = $updatedAt;

    return $this;
}

/**
 * Get updatedAt
 *
 * @return \DateTime 
 */
public function getUpdatedAt() {
    return $this->updatedAt;
}

/**
 * Set content
 *
 * @param string $content
 * @return Blog
 */
public function setContent($content) {
    $this->content = $content;

    return $this;
}

/**
 * Get content
 *
 * @return string 
 */
public function getContent() {
    return $this->content;
}

/**
 * Set isPublished
 *
 * @param boolean $isPublished
 * @return Blog
 */
public function setIsPublished($isPublished) {
    $this->isPublished = $isPublished;

    return $this;
}

/**
 * Get isPublished
 *
 * @return boolean 
 */
public function getIsPublished() {
    return $this->isPublished;
}

public function __toString() {
    return strval($this->id);
}


/**
 * Set subTitle
 *
 * @param string $subTitle
 * @return Blog
 */
public function setSubTitle($subTitle)
{
    $this->subTitle = $subTitle;

    return $this;
}

/**
 * Get subTitle
 *
 * @return string 
 */
public function getSubTitle()
{
    return $this->subTitle;
}

/**
 * Add tags
 *
 * @param \Acme\MainBundle\Entity\tag $tags
 * @return Blog
 */
public function addTag(\Acme\MainBundle\Entity\tag $tags)
{
    $this->tags[] = $tags;
    $tags->addBlog($this);

    return $this;
}

/**
 * Remove tags
 *
 * @param \Acme\MainBundle\Entity\tag $tags
 */
public function removeTag(\Acme\MainBundle\Entity\tag $tags)
{
    $this->tags->removeElement($tags);
}

/**
 * Get tags
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getTags()
{
    return $this->tags;
}
}

实体 2:标记类

<?php

namespace Acme\MainBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Tag
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\MainBundle\Entity\TagRepository")
 */
class Tag {

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="blog", mappedBy="tags")
 **/

protected $blogs;

/**
 * @var string
 *
 * @ORM\Column(name="tag", type="string", length=255)
 */
private $tag;

/**
 * @var boolean
 *
 * @ORM\Column(name="isPublished", type="boolean")
 */
private $isPublished;

/**
 * Get id
 *
 * @return integer 
 */
public function getId() {
    return $this->id;
}

/**
 * Set tag
 *
 * @param string $tag
 * @return Tag
 */
public function setTag($tag) {
    $this->tag = $tag;

    return $this;
}

/**
 * Get tag
 *
 * @return string 
 */
public function getTag() {
    return $this->tag;
}

/**
 * Set isPublished
 *
 * @param boolean $isPublished
 * @return Tag
 */
public function setIsPublished($isPublished) {
    $this->isPublished = $isPublished;

    return $this;
}

/**
 * Get isPublished
 *
 * @return boolean 
 */
public function getIsPublished() {
    return $this->isPublished;
}

public function __toString() {
    return strval($this->id);
}

/**
 * Constructor
 */
public function __construct()
{
    $this->blogs = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add blogs
 *
 * @param \Acme\MainBundle\Entity\blog $blogs
 * @return Tag
 */
public function addBlog(\Acme\MainBundle\Entity\blog $blogs)
{
    $this->blogs[] = $blogs;
    $blogs->addTag($this);


    return $this;
}

/**
 * Remove blogs
 *
 * @param \Acme\MainBundle\Entity\blog $blogs
 */
public function removeBlog(\Acme\MainBundle\Entity\blog $blogs)
{
    $this->blogs->removeElement($blogs);
}

/**
 * Get blogs
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getBlogs()
{
    return $this->blogs;
}
}

最佳答案

注意!!!

您的代码中存在循环引用!!! 当你给博客添加标签时,会调用add blog to tag等,请修改如下:

博客

/**
 * Add tags
 *
 * @param \Acme\MainBundle\Entity\tag $tags
 * @return Blog
 */
public function addTag(\Acme\MainBundle\Entity\tag $tags)
{
    if (!$this->tags->contains($tags))
    {
        $this->tags[] = $tags;
        $tags->addBlog($this);
    }

    return $this;
}

标签

/**
 * Add blogs
 *
 * @param \Acme\MainBundle\Entity\blog $blogs
 * @return Tag
 */
public function addBlog(\Acme\MainBundle\Entity\blog $blogs)
{
    if (!$this->blogs->contains($blogs))
    {
        $this->blogs[] = $blogs;
        $blogs->addTag($this);
    }


    return $this;
}

针对您的问题:

首先,安装并配置 DoctrineFixturesBundle . 使用有序的 fixture 功能首先加载标签,然后加载博客。

然后我为您编写这个示例装置:

标签 fixture

<?php

namespace Acme\MainBundle\DataFixtures\ORM;

use Acme\MainBundle Bundle\Entity\Tag;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;

class TagFixtures  extends AbstractFixture implements OrderedFixtureInterface {

    /**
     * Load data fixtures with the passed EntityManager
     *
     * @param \Doctrine\Common\Persistence\ObjectManager $manager
     */
    function load(ObjectManager $manager)
    {
        $tag1 = new Tag();
        $tag1->setTag("tag name 1");
        $tag1->setIsPublished(true);

        $tag2 = new Tag();
        $tag2->setTag("tag name 2");
        $tag2->setIsPublished(true);

        $manager->persist($tag1);
        $manager->persist($tag2);
        $this->addReference('tag-tag_1', $tag1);
        $this->addReference('tag-tag_2', $tag2);

        $manager->flush();

    }

    /**
     * Get the order of this fixture
     *
     * @return integer
     */
    function getOrder()
    {
        return 1;
    }
}

BlogFixtures

<?php

namespace Acme\MainBundle\DataFixtures\ORM;

use Acme\MainBundle\Entity\Blog;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;

class BlogFixtures  extends AbstractFixture implements OrderedFixtureInterface {

    /**
     * Load data fixtures with the passed EntityManager
     *
     * @param \Doctrine\Common\Persistence\ObjectManager $manager
     */
    function load(ObjectManager $manager)
    {

        $blog = new Blog();
        $blog->setTitle('Happy new year');
        $blog->setAuthor("me");
        $blog->setIsPublished(true);
        $blog->setContent("Happy new year");
        $blog->setSubTitle("2015");
        $blog->setCreatedAt(new \DateTime('now'));
        $blog->setUpdatedAt(new \DateTime('now'));

        $blog->addTag($this->getReference('tag-tag_1'));
//        $blog->addTag($this->getReference('tag-tag_2'));

        $manager->persist($blog);
//        $this->addReference('blog-blog_1', $blog);

        $manager->flush();

    }

    /**
     * Get the order of this fixture
     *
     * @return integer
     */
    function getOrder()
    {
        return 2;
    }
}

希望这对您有所帮助,祝您新年快乐!

关于php - symfony 2 多对多关系的固定装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736945/

有关php - symfony 2 多对多关系的固定装置的更多相关文章

  1. ruby - Rails 关联 - 同一个类的多个 has_one 关系 - 2

    我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下

  2. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  3. ruby - 在 Ruby 中将整数格式化为固定长度的字符串 - 2

    有没有一种简单的方法可以将给定的整数格式化为具有固定长度和前导零的字符串?#convertnumberstostringsoffixedlength3[1,12,123,1234].map{|e|???}=>["001","012","123","234"]我找到了解决方案,但也许还有更聪明的方法。format('%03d',e)[-3..-1] 最佳答案 如何使用%1000而不是进行字符串操作来获取最后三位数字?[1,12,123,1234].map{|e|format('%03d',e%1000)}更新:根据theTinMan的

  4. ruby - Rails 组合多个 activerecord 关系 - 2

    我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代

  5. ruby-on-rails - Ruby on Rails - has_one 关系,如何检查它是否具有现有关联? - 2

    我有一个简单的问题,与关联有关。我有一个书的模型,它有_onereservation。预订属于_书本。我想在预订Controller的创建方法中确保在预订时没有预订一本书。换句话说,我需要检查该书是否存在任何其他预订。我该怎么做?编辑:Aaa我做到了,感谢大家的提示,学到了一些新东西。当我尝试提供的解决方案时,出现no_method错误或nil_class等。这让我开始思考,我尝试处理的对象根本不存在。Krule给了我使用book.find的想法,所以我尝试使用它。最终我得到了它的工作:book=Book.find_by_id(reservation_params[:book_id])

  6. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  7. ruby - 如何在 Ruby 中返回整数的固定长度二进制表示? - 2

    我知道我可以使用Fixnum#to_s将整数表示为二进制格式的字符串。但是1.to_s(2)生成1而我希望它生成00000001。我怎样才能使所有返回的字符串都以零作为填充到8个字符?我可以使用类似的东西:binary="#{'0'*(8-(1.to_s(2)).size)}#{1.to_s(2)}"if(1.to_s(2)).size但这看起来不是很优雅。 最佳答案 使用字符串格式。"%08b"%1#=>"00000001" 关于ruby-如何在Ruby中返回整数的固定长度二进制表示?

  8. ruby-on-rails - Ruby/Rails - 检查 HABTM 关系记录中是否存在子 ID - 2

    我有一组名为Tasks和Posts的资源,它们之间存在has_and_belongs_to_many(HABTM)关系。还有一个连接它们的值的连接表。create_table'posts_tasks',:id=>falsedo|t|t.column:post_id,:integert.column:task_id,:integerend所以我的问题是如何检查特定任务的ID是否存在于从@post.tasks创建的数组中?irb(main):011:0>@post=Post.find(1)=>#@post.tasks=>[#,#]所以我的问题是,@post.tasks中是否存在"@task

  9. Ruby On Rails 模型、 View 和 Controller 之间的关系 - 2

    根据我目前的理解,如果我必须描述Rails应用程序的各个组件如何协同工作以响应请求,我会说以下内容:1)路由确定哪些请求URL映射到哪些Controller方法。2)Controller方法从模型中获取信息并将该信息(以全局变量的形式)传递给相应的View模板。3)View模板使用存储在全局变量中的数据来构造最终响应。在上面的解释中,几个组件之间的关系是明确的,不可否认的;即:1)路由和Controller方法2)Controller方法和View模板其实上面的关系是一对一的。但是,模型类与其相邻组件类型(即Controller)的关系并不明确。是的,Controller从模型中检索信

  10. ruby-on-rails - 本地 gem 的“bundle 安装”没有解决依赖关系,而 'gem install' 可以 - 2

    我在目录“/home/enterprise/pkg”中有一个本地gem(enterprise-0.0.1.gem)。它依赖于active_directorygem(v1.5.5),这是在它的enterprise.gemspec文件中指定的,如下所示:-gem.add_dependency("active_directory")在我的应用程序的Gemfile中,我添加了以下行:-gem'enterprise','0.0.1',path=>'/home/enterprise/pkg'当我做的时候bundleinstall在我的应用程序的源目录中,只安装了企业gem。因此,我遇到了引用act

随机推荐