Witam forumowiczów.
Problem mój, dość trywialny, okazał się być mi chwilowo nierozwiązywalny. Liczę na waszą pomoc. Do rzeczy: posiadam dwie encje 'Details' oraz 'Field' w relacji many to one. W widoku chcę wyświetlać po kolei encję 'Details' odwołując się do pola 'name' z 'Field'. Aby ilość zapytań nie rosła wraz z ilością rekordów postanowiłem zrobić JOIN'.a W tym momencie przy wyświetlaniu szablonu wyrzuca mi błąd, że odwołuję się do nieistniejącej metody encji Field (pomimo że pobieram Details w tablicy układają sie one obok siebie). Po tym niejasnym opisie przedstawię kod:
Encja 'Details':
/**
* Details
*
* @ORM\Table(name="details")
* @ORM\Entity(repositoryClass="Graduates\CommunityBundle\Entity\DetailsRepository")
*/
class Details
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=255, nullable=true)
*/
private $content;
/**
* @var boolean
*
* @ORM\Column(name="visible", type="boolean", nullable=true)
*/
private $visible;
/**
* @var \Person
*
* @ORM\ManyToOne(targetEntity="Person")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="person_id", referencedColumnName="id")
* })
*/
private $person;
/**
* @var \Field
*
* @ORM\ManyToOne(targetEntity="Field")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="field_id", referencedColumnName="id")
* })
*/
private $field;
Encja 'Field':
/**
* Field
*
* @ORM\Table(name="field")
* @ORM\Entity
*/
class Field
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=45, nullable=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=45, nullable=true)
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="form_name", type="string", length=45, nullable=true)
*/
private $formName;
Zapytanie do bazy:
<?php
namespace Graduates\CommunityBundle\Entity;
use Doctrine\ORM\EntityRepository;
class DetailsRepository extends EntityRepository
{
public function findByPersonJoinedToField($person)
{
$query = $this->getEntityManager()
->createQueryBuilder()
->select(array('d', 'f')) ->from('GraduatesCommunityBundle:Details', 'd')
->leftJoin('GraduatesCommunityBundle:Field', 'f', 'WITH', 'd.field=f.id')
->where('d.person = :person')
->andWhere('d.visible=1')
->setParameter('person', $person)
->getQuery();
try {
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
oraz wyświetlanie w szablonie:
{% for detail in details %}
<h4>{{ detail.field.name }}:
</h4> {{ detail.content }}
{% endfor %}
Treść błędu: Method "field" for object "Proxies\__CG__\Graduates\CommunityBundle\Entity\Field" does not exist in GraduatesCommunityBundle:Person:profile.html.twig.
Z góry dziękuję za zainteresowanie się tematem.
Ten post edytował Sagnitor 19.02.2013, 13:04:22