sisko
sisko

Reputation: 9910

Symfony error when inserting new entity data

I am a beginner learning Symfony. I have an entity called sale for which I a form for inserting sales data.

The problem is each attempt to insert data results in the following error:

Neither the property "selectedstock" nor one of the methods "addSelectedstock()"/"removeSelectedstock()", "setSelectedstock()", "selectedstock()", "__set()" or "__call()" exist and have public access in class "iCerge\Salesdeck\SalesBundle\Entity\Sale".

My Sale class is as follows:

<?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;
        }
    }

And the following is my Form class:

<?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';
    }

}

What am I doing wrong here?

Update

Screenshot shows dropdown list of available stock. The form is the sales/add form which requires an item of available stock from the list to be selected.

enter image description here

Upvotes: 0

Views: 147

Answers (1)

shacharsol
shacharsol

Reputation: 2342

You don't have a setter for selectedstock, and not related to the error you don't have annotation to mark selectedstock as an orm column, so it won't be persisted.

Upvotes: 2

Related Questions