0

我有以下代码来提取所有者对象的用户名。Owner 对象本质上是商店的所有者。下面是它在 Shop 类中的定义方式。

 /**
     * Set owner
     *
     * @param User $owner
     * @return Shop
     */
    public function setOwner(User $owner = null)
    {
        $this->owner = $owner;

        return $this;
    }

    /**
     * Get owner
     *
     * @return User
     */
    public function getOwner()
    {
        return $this->owner;
    }
    /**

如您所见,所有者返回一个用户对象。但是,当我对 User 类执行 .username 时,我总是不确定。为什么是这样?

"<%= '/profile/'+item.get('shop').owner.username %>">

当我执行以下操作时:

 "<%= '/profile/'+item.get('shop').name %>">

它打印得很好。

以下是商店中的更多代码:

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

    /**
     * @Exclude()
     * @ORM\Column(name="isVisible", type="boolean")
     */
    private $isVisible = false;

    /**
     * @ORM\OneToOne(targetEntity="Shopious\MainBundle\Entity\ShopLogo", mappedBy="shop", cascade={"persist","remove"})
     */
    protected $shoplogo;

    /**
     * @Assert\NotBlank(message="Shope name should not be blank")
     * @ORM\Column(name="name", type="string", length=100, unique=true)
     */
    protected $name;

    /**
     * Assert\NotBlank(message="Description should not be blank")
     * @ORM\Column(name="description", type="string", length=350, nullable=true)
     */
    protected $description = "";


    /**
     * @ORM\Column(name="tags", type="text",nullable=true)
     */
    protected $tags = "";

    /**
     * @ORM\OneToMany(targetEntity="Shopious\MainBundle\Entity\Product", mappedBy="shop", cascade={"remove","persist"})
     */
    protected $products;


    /**
     * @Exclude()
     * @ORM\OneToOne(targetEntity="Shopious\UserBundle\Entity\User", inversedBy="shop")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
     */
    protected $owner;

    /**
     * @Exclude()
     * @ORM\OneToOne(targetEntity="Shopious\MainBundle\Entity\PaymentInfo", inversedBy="shop", cascade={"persist","remove"})
     * @ORM\JoinColumn(name="paymentInfo_id", referencedColumnName="id" , onDelete="CASCADE")
     */
    protected $paymentInfo;

    /**
     *
     * @ORM\OneToMany(targetEntity="Shopious\MainBundle\Entity\ShopTestimonial", mappedBy="shop", cascade={"persist","remove"})
     */
    protected $testimonials;

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

    /**
     * @ORM\PrePersist
     */
    public function initialisation()
    {
        $this->shoplogo = new ShopLogo();
        $this->shoplogo->setShop($this);

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

    /**
     * Set owner
     *
     * @param User $owner
     * @return Shop
     */
    public function setOwner(User $owner = null)
    {
        $this->owner = $owner;

        return $this;
    }

    /**
     * Get owner
     *
     * @return User
     */
    public function getOwner()
    {
        return $this->owner;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->products = new ArrayCollection();
    }

    /**
     * Set shopname
     *
     * @param string $shopname
     * @return Shop
     */
    public function setName($shopname)
    {
        $this->name = $shopname;

        //return $this;
    }

    /**
     * Get shopname
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

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

        return $this;
    }

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


    /**
     * Add products
     *
     * @param Product $products
     * @return Shop
     */
    public function addProduct(Product $products)
    {
        $this->products[] = $products;

        return $this;
    }

    /**
     * Remove products
     *
     * @param Product $products
     */
    public function removeProduct(Product $products)
    {
        $this->products->removeElement($products);
    }

    /**
     * Get products
     *
     * @return Collection
     */
    public function getProducts()
    {
        return $this->products;
    }

    public function getPaymentInfo()
    {
        return $this->paymentInfo;
    }

    public function setPaymentInfo(\Shopious\MainBundle\Entity\PaymentInfo $paymentInfo)
    {
        $this->paymentInfo = $paymentInfo;
    }


    /**
     * Set tags
     *
     * @param string $tags
     * @return Shop
     */
    public function setTags($tags)
    {
        $this->tags = $tags;

        return $this;
    }

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

    /**
     * Set shoplogo
     *
     * @param Shopious\MainBundle\Entity\ShopLogo $shoplogo
     * @return Shop
     */
    public function setShoplogo(\Shopious\MainBundle\Entity\ShopLogo $shoplogo = null)
    {
        $this->shoplogo = $shoplogo;

        return $this;
    }

    /**
     * Get shoplogo
     *
     * @return Shopious\MainBundle\Entity\ShopLogo 
     */
    public function getShoplogo()
    {
        return $this->shoplogo;
    }

    /**
     * Add testimonials
     *
     * @param \Shopious\MainBundle\Entity\ShopTestimonial $testimonials
     * @return Shop
     */
    public function addTestimonial(\Shopious\MainBundle\Entity\ShopTestimonial $testimonials)
    {
        $this->testimonials[] = $testimonials;

        return $this;
    }

    /**
     * Remove testimonials
     *
     * @param \Shopious\MainBundle\Entity\ShopTestimonial $testimonials
     */
    public function removeTestimonial(\Shopious\MainBundle\Entity\ShopTestimonial $testimonials)
    {
        $this->testimonials->removeElement($testimonials);
    }

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

    /**
     * Set isVisible
     *
     * @param boolean $isVisible
     * @return Product
     */
    public function setIsVisible($isVisible)
    {
        $this->isVisible = $isVisible;

        return $this;
    }

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

}

一些获取数据值的代码:

public function getItemsAction()
    {
        try{
            $query = $this->getRequest()->query;
            $em = $this->getDoctrine()->getEntityManager();
            $items = $em->getRepository('ShopiousMainBundle:Product')->filterBy(
                    $query->get('category'), 
                    $query->get('tag'), 
                    $query->get('size'), 
                    $query->get('price'), 
                    $query->get('shop'), 
                    $query->get('sort'),
                    $query->get('page')
                );

            return $this->Json($items);
        }catch(\Exception $ex){
            return $this->Json($ex->getMessage(),false);
        }
    }   
4

3 回答 3

0

听起来类所有者的名称存储在变量“名称”中,而不是“用户名”

于 2013-03-28T02:11:10.683 回答
0

我认为 protected $username; 不只存在 protected $name;

如果你想

"<%= '/profile/'+item.get('shop').owner.username %>"> 然后改

首先将此添加到您的课程中

 protected   $username[]; 


public function addUsers(User $user = null)
{
   array_push($this->username, $user);

    return $this->username;
}


public function getUsers()
{
   return $this->username;
}

或单个用户

protected   $username; 

public function addUsers(User $user = null)
{
   $this->username= $user;

    return $this->username;
}


public function getUsers()
{
   return $this->username;
}
于 2013-03-28T02:20:15.527 回答
0

我猜这是因为他们不是关系的数据。看起来您可能有一个项目,您正在调用一个方法来获取另一个对象,然后在该对象上调用另一个方法来获取另一个对象。由于第一个调用是一个代理对象,它可能不会使用它加载第二个代理对象数据。如果您像在控制器中那样查看模板外部数据中的数据,我猜它没有在那里定义。您可能希望确保在访问视图之前加载数据。我认为问题的根源在于最初的关系。

为了帮助您,您可以在获取数据或设置值的地方发布一些控制器代码。

于 2013-03-28T03:07:24.000 回答