我希望有人可以对此有所了解,因为它让我发疯。
我有一个允许用户添加宠物的表单,其中包含物种和品种的选择框。这些字段在pet表中作为整数,这些整数是在CMS中列出数据所必需的,我通过将id与相应的entites链接来实现,如下所示:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Species", inversedBy="pet", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="species", referencedColumnName="id")
* })
*/
protected $species;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Breed", inversedBy="pet", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="breed", referencedColumnName="id")
* })
*/
protected $breed;
"物种"表包含ID,名称和描述,以及"品种"表。宠物" table只包含名为" species"和#34;繁殖"这是整数。但是,提交表单时,我收到以下Symfony错误:
在关联AppBundle \ Entity \ Pet#species上找到Doctrine \ Common \ Collections \ ArrayCollection类型的实体,但期待AppBundle \ Entity \ Species
但是 - 如果我将@var更改为Species的实体(或品种的品种),我无法在CMS中列出宠物,因为我收到此错误:
无法在AppBundle:table:petstable.html.twig第39行的字符串变量(" 1")上访问属性(" name")
我在列表页面中将其分配如下:
<tbody>
{% for pet in pets %}
<tr>
<td>{{ pet.id }}</td>
<td>{{ pet.name }}</td>
<td>{{ pet.species.name|title }}</td>
<td>{{ pet.breed.name|title }}</td>
<td>{{ pet.dateAdded|date('Y-m-d')}}</td>
<td>{% for owner in pet.customer %}
<a href="{{ path('app_customers_profile', {'id':owner.id}) }}">
{{ (owner.firstname ~ ' ' ~ owner.lastname ~ ' ')|e }}
</a>
{% else %}
No owners found
{% endfor %}
</td>
<td>
<button class="btn btn-info btn-owner" data-id="{{ pet.id }}" data-toggle="modal" data-target="#bs_modal_small"><i class="fa fa-pencil"></i></button>
</td>
<td>
<a class="btn btn-success" href="{{ path('app_pet_edit', {'id':pet.id}) }}">Edit</a>
</td>
</tr>
{% else %}
<td colspan="8">No pets found with given filters, please try another filter.</td>
{% endfor %}
</tbody>
错误引用的第39行是:
<td>{{ pet.species.name|title }}</td>
这也将发生在第40行,因为它无法访问属性&#34; name&#34;关于品种。
任何帮助表示赞赏 - 这真的让我很头疼,而我却无法理解它!
如果有另一个解决这个问题的线程可能我找不到,那么任何与之相关的链接都会很棒。
提前谢谢你 迈克尔