Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Symfony2查找ByTags?_Symfony - Fatal编程技术网

用Symfony2查找ByTags?

用Symfony2查找ByTags?,symfony,Symfony,我抓取这种数组 这是我的$tags变量的变量转储 array(2) { [0]=> string(1) "3" [1]=> string(1) "4" } 我的实体 <?php namespace Lan\CrmBundle\Entity; use Doctrine\ORM\Mapping AS ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity */ class

我抓取这种数组

这是我的$tags变量的变量转储

array(2) { [0]=> string(1) "3" [1]=> string(1) "4" }
我的实体

<?php
namespace Lan\CrmBundle\Entity;

use Doctrine\ORM\Mapping AS ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 */
class Link
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     * @Assert\NotBlank()
     */
    private $url;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $created_at;

    /**
     * @ORM\ManyToOne(targetEntity="Lan\SecurityBundle\Entity\User", inversedBy="links")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @ORM\ManyToMany(targetEntity="Lan\CrmBundle\Entity\LinkTag", inversedBy="links")
     * @ORM\JoinTable(
     *     name="LinkTagToLink",
     *     joinColumns={@ORM\JoinColumn(name="link_id", referencedColumnName="id", nullable=false)},
     *     inverseJoinColumns={@ORM\JoinColumn(name="link_tag_id", referencedColumnName="id", nullable=false)}
     * )
     */
    private $tags;

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

    /**
     * Set url
     *
     * @param string $url
     * @return Link
     */
    public function setUrl($url)
    {
        $this->url = $url;

        return $this;
    }

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

    /**
     * Set description
     *
     * @param string $description
     * @return Link
     */
    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

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

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

        return $this;
    }

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

    /**
     * Set user
     *
     * @param \Lan\SecurityBundle\Entity\User $user
     * @return Link
     */
    public function setUser(\Lan\SecurityBundle\Entity\User $user = null)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \Lan\SecurityBundle\Entity\User
     */
    public function getUser()
    {
        return $this->user;
    }

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

    /**
     * Add tags
     *
     * @param \Lan\CrmBundle\Entity\LinkTag $tags
     * @return Link
     */
    public function addTag(\Lan\CrmBundle\Entity\LinkTag $tags)
    {
        $this->tags[] = $tags;

        return $this;
    }

    /**
     * Remove tags
     *
     * @param \Lan\CrmBundle\Entity\LinkTag $tags
     */
    public function removeTag(\Lan\CrmBundle\Entity\LinkTag $tags)
    {
        $this->tags->removeElement($tags);
    }

    /**
     * Get tags
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTags()
    {
        return $this->tags;
    }
}
但我有一个错误:

ContextErrorException:注意:未定义索引:中的joinColumns

我想我不能像我想的那样使用findByTags()


提前谢谢

我认为你找不到bytags,因为SF2不知道你是想要
还是


我建议您的唯一解决方案是,您需要手动从link_标记表(使用repository
lanchbundle:LinkTag
)查询以获取所有
link.id
,然后继续使用
lanchbundle:link

检索链接数据。我找到了一种方法,但并不是真正想要的:

public function findByUsersAndTags($users, $tags)
{
    $queryBuilder = $this->createQueryBuilder('l')
        ->leftJoin('l.tags', 't')->addSelect('t')
        ->leftJoin('l.user', 'u')->addSelect('u')
        ->orderBy('l.id', 'desc');

    if($users) {
        foreach($users as $user_id) {
            $queryBuilder->orHaving('u.id = :id')->setParameter('id', $user_id);
        }
    }

    if($tags) {
        foreach($tags as $tag_id) {
            $queryBuilder->orHaving('t.id = :id')->setParameter('id', $tag_id);
        }
    }

    return $queryBuilder->getQuery()->getResult();
}

如果你能在这里发布实体类,这将非常有帮助。我已经编辑了我的第一篇文章,你可以想象我从多个选择中获取标签,标签[]作为名称。
public function findByUsersAndTags($users, $tags)
{
    $queryBuilder = $this->createQueryBuilder('l')
        ->leftJoin('l.tags', 't')->addSelect('t')
        ->leftJoin('l.user', 'u')->addSelect('u')
        ->orderBy('l.id', 'desc');

    if($users) {
        foreach($users as $user_id) {
            $queryBuilder->orHaving('u.id = :id')->setParameter('id', $user_id);
        }
    }

    if($tags) {
        foreach($tags as $tag_id) {
            $queryBuilder->orHaving('t.id = :id')->setParameter('id', $tag_id);
        }
    }

    return $queryBuilder->getQuery()->getResult();
}