我有一个User Entity类,其中包含一对多属性“transactions”,用于保存该特定用户的事务。
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
class User extends BaseUser
{
//...//
/*
* @ORM\OneToMany(targetEntity="Transaction", mappedBy="user")
*
*/
protected $transactions;
//...//
}
在后端我有扩展奏鸣曲管理类的userAdmin类
/**
* @param \Sonata\AdminBundle\Datagrid\ListMapper $listMapper
* @return void
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('id')
->addIdentifier('username')
->add('transactions')
;
}
如果我这样做,我会收到以下错误:
在呈现模板期间抛出了一个异常(“你必须定义一个
associated_tostring
选项,或者在SonataDoctrineORMAdminBundle中为来自服务gd_admin.customer_details的字段选项事务创建一个Project\MyBundle\Entity\Transaction::__toString
方法” :CRUD:第17行的list_orm_one_to_many.html.twig。
不了解如何在“用户列表”页面中提供用户事务的链接。任何帮助都会非常棒。
感谢。
答案 0 :(得分:3)
您需要在Transaction类中实现__toString()方法。它应该返回一个有意义地描述事务的字符串。 Symfony将自动调用此方法以获取要针对用户显示的事务的描述。以下是我在其中一个项目中用于User类的示例实现:
public function __toString()
{
return ($this->firstName . ' ' . $this->lastName);
}
最诚挚的问候, Champika
答案 1 :(得分:0)
您要做的就是在您的实体上指定function __toString()
,或者在字段规范中有另一个选项,您可以说应该将哪个属性用作实体的标题,如下所示:
$listMapper
->add('id')
->addIdentifier('username')
->add('transactions', null, array('associated_property' => 'transaction_name'))
;
这是假设您已在transaction_name
实体中提交了名为Transaction
的内容,或者您只能使用该ID。