2012-10-19 13 views
19

Staram się wypełnić bazę z Użytkownikiem obiektu i osoby wykonującSymfony2: spl_object_hash() oczekuje parametr 1 za przedmiot, string podane w Naukach

utrzymują i równo.

Przede wszystkim tworzę obiekt Person i utrzymują się i opróżnić go:

$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(); 

A potem mojego obiektu użytkownika:

$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(); 

Ale gdy próbuje opróżnić() proces trwać od obiekt użytkownika, otrzymuję błąd:

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 

A oto LOG entier:

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 = ? (["[email protected]"]) 
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":"[email protected]","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". 

Odpowiedz

27

I w końcu znalazłem problem:

Podczas tworzenia użytkownika obiektu, zamiast ustawiać te pola

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

jako obiekty (ze względu na OneToMany stosunku), I proponowały tu tylko ciąg znaków, z formularza.

Tak, dla tych pól, kod byłoby:

$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()); 

A potem:

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

Więc: Bądź ostrożny, gdy otrzymujesz tego rodzaju ostrzeżeń, prawdopodobnie masz do sprawdzenia jeśli wypełniasz obiekt we właściwy sposób.

+3

Edytuj: W celu optymalizacji unikaj wywoływania metody findOneById, aby to zrobić. Nie trzeba wykonywać kwerendy i pobrać całego obiektu, więc po prostu utwórz nową instancję obiektu i ustaw identyfikator. –

+11

Zamiast tego użyj '$ em-> getReference()'. – vbence

+0

@vbence co masz na myśli? –

Powiązane problemy