首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外场符号3的ManyToOne理论数据库关系

外场符号3的ManyToOne理论数据库关系
EN

Stack Overflow用户
提问于 2017-04-02 16:58:59
回答 1查看 71关注 0票数 1

我只是新来的塞弗尼,所以请耐心点。

我想在Symfony中创建一个数据库关系,比如说..。

我有实体CurrencyAddRateAddRateCurrency --这些实体可以完成3件简单的事情。

  1. 用户将使用Currency实体添加不同类型的货币。
  2. 用户将选择必须使用AddRate实体添加这些货币的分支。
  3. 用户将使用AddRateCurrency更新每种货币的汇率。

我遇到的问题是

关联字段"MontealBundle\Entity\AddRate#$currency“的类型MontealBundle\Entity\AddRate#$currency的期望值为"MontealBundle\Entity\Currency”。

在添加速率AddRateForm时,我使用EntityType嵌入我的表单。

代码语言:javascript
复制
 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('branch', EntityType::class, array(
                'label' => 'Branch',
                'class'=>'MontealBundle\Entity\Branch',
                'query_builder' => function (BranchRepository $er) {
                    return $er->findAllActiveBranches();
                },
                'choice_label' => 'name',
                'placeholder' => 'Choose a Branch',
                'empty_data' => null,
                'required' => true,
                'constraints' => array(
                    new NotBlank(array("message" => 'Branch is required.'))
                )
            ))
            ->add('currency', EntityType::class, array(
                'label' => 'Currency',
                'class'=>'MontealBundle\Entity\Currency',
                'query_builder' => function (CurrencyRepository $er) {
                    return $er->findAllActiveCurrencies();
                },
                'choice_label' => 'currency',
                'placeholder' => 'Choose a Currency',
                'empty_data' => null,
                'multiple' => true,
                // 'expanded' => true,
                'required' => true,
                'constraints' => array(
                    new NotBlank(array("message" => 'Currency is required.'))
                )
            ))
        ;
    }

关于Currency实体

代码语言:javascript
复制
/**
 * @ORM\Entity
 * @ORM\Table(name="currency")
 * @ORM\Entity(repositoryClass="MontealBundle\Repository\CurrencyRepository")
 * @ORM\HasLifecycleCallbacks()
 * @UniqueEntity(fields={"code"}, message="Code is already used.")
 * @UniqueEntity(fields={"currency"}, message="Currency is already used.")
 */
class Currency
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Administrator")
     * @ORM\JoinColumn(name="administrator_id", referencedColumnName="id")
     */
    private $administrator;

    /**
     * @ORM\Column(type="string", unique=true)
     */
    private $currency;

    /**
     * @ORM\Column(type="string", unique=true)
     */
    private $code;

    /**
     * @ORM\Column(type="integer")
     */
    private $status;

    /**
     * @ORM\Column(type="date")
     */
    private $createdAt;

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

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

    /**
     * @return mixed
     */
    public function getAdministrator()
    {
        return $this->administrator;
    }

    /**
     * @param mixed $administrator
     */
    public function setAdministrator($administrator)
    {
        $this->administrator = $administrator;
    }

    /**
     * @return mixed
     */
    public function getCurrency()
    {
        return $this->currency;
    }

    /**
     * @param mixed $currency
     */
    public function setCurrency($currency)
    {
        $this->currency = $currency;
    }

    /**
     * @return mixed
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * @param mixed $code
     */
    public function setCode($code)
    {
        $this->code = $code;
    }

    /**
     * @return mixed
     */
    public function getStatus()
    {
        return $this->status;
    }

    /**
     * @param mixed $status
     */
    public function setStatus($status)
    {
        $this->status = $status;
    }

    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * @ORM\PrePersist
     */
    public function setCreatedAt()
    {
        $this->createdAt = new \DateTime();
    }

    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * @ORM\PreUpdate()
     */
    public function setUpdatedAt()
    {
        $this->updatedAt = new \DateTime();
    }
}

关于AddRate实体

代码语言:javascript
复制
/**
 * @ORM\Entity
 * @ORM\Table(name="add_rate")
 * @ORM\Entity(repositoryClass="MontealBundle\Repository\AddRateRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class AddRate
{

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

    /**
     * @ORM\ManyToOne(targetEntity="Branch")
     * @ORM\JoinColumn(name="branch_id", referencedColumnName="id")
     */
    private $branch;

    /**
     * @ORM\OneToMany(targetEntity="AddRateCurrency", mappedBy="add_rate")
     */
    private $currency;

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

    /**
     * @ORM\ManyToOne(targetEntity="Administrator")
     * @ORM\JoinColumn(name="administrator_id", referencedColumnName="id")
     */
    private $administrator;

    /**
     * @ORM\Column(type="date")
     */
    private $createdAt;

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

    /**
     * @return mixed
     */
    public function getBranch()
    {
        return $this->branch;
    }

    /**
     * @param mixed $branch
     */
    public function setBranch($branch)
    {
        $this->branch = $branch;
    }

    /**
     * @return mixed
     */
    public function getCurrency()
    {
        return $this->currency;
    }

    /**
     * @param mixed $currency
     */
    public function setCurrency($currency)
    {
        $this->currency = $currency;
    }

    public function addCurrency(Currency $currency) {
        $this->currency[] = $currency;
    }

    /**
     * @return mixed
     */
    public function getAdministrator()
    {
        return $this->administrator;
    }

    /**
     * @param mixed $administrator
     */
    public function setAdministrator($administrator)
    {
        $this->administrator = $administrator;
    }

    /**
     * @ORM\PrePersist
     */
    public function setCreatedAt()
    {
        $this->createdAt = new \DateTime();
    }

    public function getCreatedAt()
    {
        return $this->createdAt;
    }
}

关于AddRateCurrency实体

代码语言:javascript
复制
/**
 * @ORM\Entity
 * @ORM\Table(name="add_rate_currency")
 */
class AddRateCurrency
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="AddRate", inversedBy="AddRateCurrency")
     * @ORM\JoinColumn(nullable=false)
     */
    private $currency;

    /**
     * @ORM\Column(type="string")
     */
    private $rate;

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

    /**
     * @return mixed
     */
    public function getCurrency()
    {
        return $this->currency;
    }

    /**
     * @param mixed $currency
     */
    public function setCurrency($currency)
    {
        $this->currency = $currency;
    }

    /**
     * @return mixed
     */
    public function getRate()
    {
        return $this->rate;
    }

    /**
     * @param mixed $rate
     */
    public function setRate($rate)
    {
        $this->rate = $rate;
    }


}
EN

回答 1

Stack Overflow用户

发布于 2017-04-02 17:24:33

AddRate实体中,删除setCurrency函数。然后,Symfony将(自动)使用您的addCurrency函数,因为$currency是ArrayCollection。

您对变量名的选择在一定程度上增加了混乱。在AddRate中,您可能需要考虑将$currency重命名为$currencies

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43171002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档