【发布时间】:2015-04-08 21:24:31
【问题描述】:
我是学习 Symfony 的初学者。我有一个名为 sale 的实体,我有一个用于插入销售数据的表单。
问题是每次尝试插入数据都会导致以下错误:
既不是“selectedstock”属性也不是其中一种方法 "addSelectedstock()"/"removeSelectedstock()", "setSelectedstock()", “selectedstock()”、“__set()”或“__call()”存在并公开 在“iCerge\Salesdeck\SalesBundle\Entity\Sale”类中访问。
我的Sale类如下:
<?php
namespace iCerge\Salesdeck\SalesBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Sales
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="iCerge\Salesdeck\SalesBundle\Entity\SalesRepository")
*/
class Sale
{
private $selectedstock;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var float
*
* @ORM\Column(name="cost", type="float")
*/
private $cost;
/**
* @var float
*
* @ORM\Column(name="profitloss", type="float")
*/
private $profitloss;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="iCerge\Salesdeck\StockBundle\Entity\Stock", inversedBy="sales")
* @ORM\JoinColumn(name="sid", referencedColumnName="id")
*/
protected $stock;
/**
* @var integer
*
* @ORM\Column(name="number_of_purchases", type="integer")
*/
private $number_of_purchases;
/**
* @var float
*
* @ORM\Column(name="active_buy_price", type="float")
*/
private $active_buy_price;
/**
* @var integer
*
* @ORM\Column(name="sid", type="integer")
*/
private $sid;
/**
* Get sid
*
* @return integer
*/
public function getSid()
{
return $this->sid ? $this->sid : 0;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set cost
*
* @param float $cost
* @return Sales
*/
public function setCost($cost)
{
$this->cost = $cost;
return $this;
}
/**
* Get cost
*
* @return float
*/
public function getCost()
{
return $this->cost;
}
/**
* Set date
*
* @param \DateTime $date
* @return Sales
*/
public function setDate($date)
{
$this->date = $date;
return $this;
}
/**
* Get date
*
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* Set profitloss
*
* @param float $profitloss
* @return Sales
*/
public function setProfitloss($profitloss)
{
$this->profitloss = $profitloss;
return $this;
}
/**
* Get profitloss
*
* @return float
*/
public function getProfitloss()
{
return $this->profitloss;
}
/**
* Set stock
*
* @param \iCerge\Salesdeck\StockBundle\Entity\Stock $stock
* @return Sale
*/
public function setStock(\iCerge\Salesdeck\StockBundle\Entity\Stock $stock = null)
{
$this->stock = $stock;
return $this;
}
/**
* Get stock
*
* @return \iCerge\Salesdeck\StockBundle\Entity\Stock
*/
public function getStock()
{
return $this->stock;
}
/********************/
/**
* Set number_of_purchases
*
* @return integer
*/
public function setNumberOfPurchases($purchases)
{
$this->number_of_purchases = $purchases;
return $this;
}
/**
* Get number_of_purchases
*
* @return integer
*/
public function getNumberOfPurchases()
{
return $this->number_of_purchases;
}
/**
* Set active_buy_price
*
* @return integer
*/
public function setActiveBuyPrice($price)
{
$this->active_buy_price = $price;
return $this;
}
/**
* Get active_buy_price
*
* @return integer
*/
public function getActiveBuyPrice()
{
return $this->active_buy_price;
}
public function getselectedstock()
{
return $this->selectedstock;
}
}
以下是我的 Form 类:
<?php
namespace iCerge\Salesdeck\SalesBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class SalesType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('selectedstock', 'choice', array(
'choices' => $options['allow_extra_fields'],
'required' => true,
'empty_value' => 'Choose a Product',
'empty_data' => null,
'label' => 'Select Item',
// 'mapped'=>false
))
/*->add('test', 'choice', array(
'choices' => $options['allow_extra_fields'],
'required' => false,
'empty_value' => 'Choose your gender',
'empty_data' => null,
'mapped'=>false
))*/
->add('number_of_purchases', 'integer', array('label'=>'Number of purchases'))
->add('cost')
->add('profitloss', 'text', array('label'=>'Profit/Loss'))
->add('date', 'datetime', array('data'=>new \DateTime('now')))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
// 'data_class' => 'iCerge\Salesdeck\SalesBundle\Entity\Sales'
'data_class' => 'iCerge\Salesdeck\SalesBundle\Entity\Sale'
));
}
/**
* @return string
*/
public function getName()
{
return 'icerge_salesdeck_salesbundle_sales';
}
}
我在这里做错了什么?
更新
屏幕截图显示可用库存的下拉列表。 该表单是销售/添加表单,需要从列表中选择一项可用库存。
【问题讨论】:
-
某处缺少大写字母? getselectedstock 与 getSelectedstock
-
你的 selectedstock 属性的 ORM 映射是什么?
-
@whitelettersandblankspaces:selectedStock 是我将销售与特定可用库存项目联系起来的方式 - 我希望能回答你的问题,因为我对交响乐很陌生。如果有助于澄清事情,我已附上屏幕截图
-
通过映射我是指您用于属性
selectedStock的注释(就像您对其他属性所做的那样)。看看 sharchasol 的回答,我发现他也指出了这一点。尝试为selectedStock定义 ORMapping 并生成适当的 getter/setter,以便至少有一个错误提到的方法可用。