Symfony2: spl_object_hash() expects parameter 1 to be object, string given in Doctrine

I am trying to populate the database with the object User and Person by executing

persist and flush.

First of all, I am creating the Person object and persist and flush it:

$person->setFirstname($enquiry->getFirstname());
$person->setLastname($enquiry->getLastname());
$person->setLastname($enquiry->getLastname());
$person->setSex($enquiry->getSex());
$person->setEmail($enquiry->getEmail());
$person->setAddress1($enquiry->getAddress1());
$person->setAddress2($enquiry->getAddress2());
$person->setCity($enquiry->getCity());
$person->setZipcode($enquiry->getZipcode());
$country = $em->getRepository('SciForumVersion2Bundle:Country')->findOneById($enquiry->getCountry());  
$person->setCountry($country);

$em->persist($person);
$em->flush();

And then my User object:

$user->setEmail($enquiry->getEmail());
$user->setPassword($enquiry->getPassword());
$user->setPersonId($person->getId());
$user->setDegree($enquiry->getDegree());
$user->setSex($enquiry->getSex());
$user->setOrganization($enquiry->getOrganization());
$user->setTelephone($enquiry->getTelephone());
$user->setFax($enquiry->getFax());
$user->setWorkplace($enquiry->getWorkplace());  
$user->setJobtype($enquiry->getJobtype());
$user->setResearchField($enquiry->getResearchField());
$user->setManageConference(0);
$user->setIp( $IP);
$user->setStatus( 0 );
$user->setDateRegistered( time() );

$em->persist($user);
$em->flush();

But when trying to flush() the persist of the user object, I am getting the error:

Warning: spl_object_hash() expects parameter 1 to be object, string given in /home/milos/workspace/conference2.0/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095 

And here is the entier LOG:

Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
Populated SecurityContext with an anonymous Token
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onKernelRequest".
Matched route "SciForumVersion2Bundle_security_register" (parameters: "_controller": "SciForum\Version2Bundle\Controller\SecurityController::registerAction", "_route": "SciForumVersion2Bundle_security_register")
Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
Notified event "kernel.controller" to listener "JMS\SecurityExtraBundle\Controller\ControllerListener::onCoreController".
SET NAMES UTF8 ([])
SELECT t0.id AS id1, t0.country AS country2, t0.phone_prefix AS phone_prefix3 FROM countries t0 ([])
SELECT t0.id AS id1, t0.degree AS degree2 FROM web_user_degree t0 ([])
SELECT t0.id AS id1, t0.place AS place2 FROM web_user_workplace t0 ([])
SELECT t0.id AS id1, t0.code AS code2, t0.type AS type3 FROM web_user_jobtype t0 ([])
SELECT t0.id AS id1, t0.name AS name2 FROM web_user_field t0 ([])
SELECT t0.id AS id1, t0.email AS email2, t0.password AS password3, t0.salt AS salt4, t0.sex AS sex5, t0.department AS department6, t0.organization AS organization7, t0.telephone AS telephone8, t0.fax AS fax9, t0.research_keywords AS research_keywords10, t0.manage_conference AS manage_conference11, t0.ip AS ip12, t0.status AS status13, t0.date_registered AS date_registered14, t0.person_id AS person_id15, t0.degree AS degree16, t0.workplace AS workplace17, t0.jobtype AS jobtype18, t0.research_field AS research_field19, t0.person_id AS person_id20 FROM web_user t0 WHERE t0.email = ? (["cuculovic@mdpi.com"])
SELECT t0.id AS id1, t0.country AS country2, t0.phone_prefix AS phone_prefix3 FROM countries t0 WHERE t0.id = ? (["196"])
INSERT INTO person (firstname, middlename, lastname, sex, email, address1, address2, city, state, zipcode, country) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ({"1":"Milos","2":null,"3":"Cuculovic","4":"m","5":"cuculovic@mdpi.com","6":"Kandererstrasse 25","7":null,"8":"Basel","9":null,"10":"4057","11":196})
Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException".
Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException".
Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException".
ErrorException: Warning: spl_object_hash() expects parameter 1 to be object, string given in /home/milos/workspace/conference2.0/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095 (uncaught exception) at /home/milos/workspace/conference2.0/vendor/symfony/src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php line 65
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
Notified event "kernel.controller" to listener "JMS\SecurityExtraBundle\Controller\ControllerListener::onCoreController".

Answers


I have finally found the problem:

When creating the object user, instead of setting those fields

$user->setDegree();
$user->setWorkplace();  
$user->setJobtype();
$user->setResearchField();

as objects (because of the OneToMany relation), I gived here only a string, from the form.

So, for those fields, the code would be:

$degree     = $em->getRepository('SciForumVersion2Bundle:Degree')->findOneById($enquiry->getDegree());
$workplace  = $em->getRepository('SciForumVersion2Bundle:Workplace')->findOneById($enquiry->getWorkplace());
$job_type   = $em->getRepository('SciForumVersion2Bundle:JobType')->findOneById($enquiry->getJobtype());
$research_field = $em->getRepository('SciForumVersion2Bundle:ResearchField')->findOneById($enquiry->getResearchField());

And then:

$user->setPerson($person);
$user->setWorkplace($workplace);    
$user->setJobtype($job_type);
$user->setResearchField($research_field);

So: Be careful when you are getting this kind of warnings, you probably have to check if you are populating your object in the right way.


Need Your Help

How to access CPU's heat sensors?

c windows hardware sensor hardware-interface

I am working on software in which I need to access the temperature sensors in the CPU and get control over them.

Compute a checksum on the iPhone from NSData

iphone nsdata

Using the iPhone SDK, I'm having the user select images from the image picker. If the user selects an image they've selected before, I'd like to make the user aware of it.