2

The error I receive is here...

An exception occurred while executing 'INSERT INTO users (image_name, updated_at, email, first_name, last_name, start_weight) VALUES (?, ?, ?, ?, ?, ?)' with params [null, "2015-08-13 04:52:18", "wei23849@aldkfj.com", "rick", "mason", "200"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'image_name' cannot be null

This is the Entity..

<?php
namespace AppBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 * @UniqueEntity("email", message="That email is already in use")
 * @Vich\Uploadable
 */
class User
{

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

    /**
     * @Vich\UploadableField(mapping="profile_image", fileNameProperty="imageName")
     * @var File
     */
    private $imageFile;

    /**
     * @ORM\Column(type="string", length=255)
     *  
     * @var string
     */
    private $imageName;

    /**
     * @ORM\Column(type="datetime")
     *
     * @var \DateTime
     */
    private $updatedAt;

    /**
     * @Assert\NotBlank()
     * @Assert\Email(message="Must be a valid email.")
     * @ORM\Column(type="string", length=50)
     */
    private $email;

    /**
     * @Assert\NotBlank()
     * @Assert\Regex("/^[a-zA-Z -']+$/")
     * @ORM\Column(type="string", length=50)
     */
    private $first_name;

    /**
     * @Assert\NotBlank()
     * @Assert\Regex(pattern = "/^[a-zA-Z -']+$/", message="Name must be only letters.")
     * @ORM\Column(type="string", length=50, unique=true)
     */
    private $last_name;

    /**
     * @Assert\NotBlank()
     * @Assert\Type(type="numeric")
     * @Assert\GreaterThan(value=70)
     * @ORM\Column(type="decimal")
     */
    public $start_weight;

    /**
     * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
     */
    public function setImageFile(File $image = null) {
        $this->imageFile = $image;
        if ($image) {
            $this->updatedAt = new \DateTime('now');
        }
    }

    /**
     * @return File
     */
    public function getImageFile() {
        return $this->imageFile;
    }

    /**
     * @param string $imageName
     */
    public function setImageName($imageName) {
        $this->imageName = $imageName;
    }

    /**
     * @return string
     */
    public function getImageName(){
        return $this->imageName;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }

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

    /**
     * Set first_name
     *
     * @param string $firstName
     * @return User
     */
    public function setFirstName($firstName)
    {
        $this->first_name = $firstName;
        return $this;
    }

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

    /**
     * Set last_name
     *
     * @param string $lastName
     * @return User
     */
    public function setLastName($lastName)
    {
        $this->last_name = $lastName;
        return $this;
    }

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

    /**
     * Set start_weight
     *
     * @param string $startWeight
     * @return User
     */
    public function setStartWeight($startWeight)
    {
        $this->start_weight = $startWeight;

        return $this;
    }

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

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


}

This is the Form Type

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

/**
* 
*/
class UserType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('email', 'email', array('label' => "Your Email", 
                                            'attr' => array(
                                                    'placeholder' => 'Enter Email',
                                                    'class' => 'form-control')))
            ->add('first_name', 'text', array('label'=>'First Name',
                                                'attr' => array(
                                                    'placeholder' => "Enter First Name",
                                                    'class' => 'form-control')))
            ->add('last_name', 'text', array('label'=>'Last Name',
                                                'attr'=> array(
                                                    'placeholder' => "Your Last Name",
                                                    'class' => 'form-control')))
            ->add('start_weight', 'text', array('label' => "Your Current Weight",
                                                'attr' => array(
                                                    'class' => "form-control",
                                                    'placeholder' => "Enter Weight")))
            ->add('imageFile', 'file')
            ->add('submit', 'submit', array('label' => "Sign Up!",
                                                'attr' => array(
                                                    'class' => 'btn btn-md btn-primary')));
}

public function getName() {
    return 'user';
}
}

The interesting thing about this is I have two separate projects. Both of them code wise are the EXACT SAME. The code works in one project and doesn't in the other. I have the dumper in the action and run it on _FILES and getting error code 0, so nothing wrong there. The upload is in fact taking place. In the kernel I have umask(0000) in both instances so I know that I don't have permission issues.

I can't find anything as to why this is occurring.

Rick Mason
  • 311
  • 1
  • 5
  • 18

2 Answers2

0

One possible cause for this could be that VichUploaderBundle's listeners are not firing. Did you try to clear the cache?

K-Phoen
  • 1,260
  • 9
  • 18
  • I'm sorry, I should of said so in my original post. I have cleared the cache. I even did the rm -rF command on the app/cache/dev* just to make sure! – Rick Mason Aug 13 '15 at 09:52
0

I realise this is an old question but this shows up in google searches and seems to be the most relevant. I thought I might be able to help anyone who runs into this problem too. I would have added a comment but don't have the reputation to do so.

The original question does not include details of the config.yml, checking the configuration was key to solving the problem for me.

The Entity mapping:

* @Vich\UploadableField(mapping="profile_image", fileNameProperty="imageName")

Needs to have a corresponding mapping in config.yml

vich_uploader:
    db_driver: orm
    mappings:
        profile_image:
            uri_prefix: /profile/images
            upload_destination: '%kernel.root_dir%/../web/profile/images'

If you followed the documentation instructions you might have set up the mapping in config.yml as product_image rather than profile_image. It is easy to forget to update your mapping if you decide to change it for your entity.

Sean Tasker
  • 69
  • 1
  • 5