我创建了一个包含产品和类别的数据库:
CREATE TABLE categoria(
id int(255) auto_increment not null,
nombre varchar(50),
CONSTRAINT pk_categoria PRIMARY KEY(id),
)ENGINE = InnoDb;
CREATE TABLE producto(
id int(255) auto_increment not null,
nombre varchar(50),
categoria int(11),
createdAt datetime,
updatedAt datetime,
CONSTRAINT pk_producto PRIMARY KEY(id),
CONSTRAINT fk_producto_categoria FOREIGN KEY(categoria) references categoria(id),
)ENGINE = InnoDb;
使用twig打印产品时,除了类别编号之外,它显示所有字段,我收到错误:
在渲染模板期间抛出异常(" Catchable>致命错误:类Proxies__CG __ \ BackendBundle \ Entity \ Categoria>的对象无法转换为字符串")。
有什么想法解决这个问题?
BackendBundle\Entity\Producto:
type: entity
table: producto
indexes:
fk_producto_categoria:
columns:
- categoria
id:
id:
type: integer
nullable: false
options:
unsigned: false
id: true
generator:
strategy: IDENTITY
fields:
nombre:
type: string
nullable: true
length: 100
options:
fixed: false
createdat:
type: datetime
nullable: true
column: createdAt
updatedat:
type: datetime
nullable: true
column: updatedAt
manyToOne:
categoria:
targetEntity: Categoria
cascade: { }
fetch: LAZY
mappedBy: null
inversedBy: null
joinColumns:
categoria:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
BackendBundle\Entity\Categoria:
type: entity
table: categoria
id:
id:
type: integer
nullable: false
options:
unsigned: false
id: true
generator:
strategy: IDENTITY
fields:
nombre:
type: string
nullable: true
length: 50
options:
fixed: false
lifecycleCallbacks: { }
<?php
namespace BackendBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Producto
*/
class Producto
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $nombre;
/**
* @var integer
*/
private $categoria;
/**
* @var \DateTime
*/
private $createdAt;
/**
* @var \DateTime
*/
private $updatedAt;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nombre
*
* @param string $nombre
*
* @return Producto
*/
public function setNombre($nombre)
{
$this->nombre = $nombre;
return $this;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre()
{
return $this->nombre;
}
/**
* Set categoria
*
* @param integer $categoria
*
* @return Producto
*/
public function setCategoria($categoria)
{
$this->categoria = $categoria;
return $this;
}
/**
* Get categoria
*
* @return integer
*/
public function getCategoria()
{
return $this->categoria;
}
/**
*
*/
public function __toString(){
return $this->id;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return Producto
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
*
* @return Producto
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @var \DateTime
*/
private $createdat;
/**
* @var \DateTime
*/
private $updatedat;
}
答案 0 :(得分:0)
你正试图回应&#34;通过Twig的一个对象。在这种情况下,&#34;分类&#34;宾语。你可能想要回应这个名字,而不是回应这个对象;
{{ producto.categoria.nombre }}
解决此问题的另一种方法是将一个__toString方法添加到Categoria实体,例如;
class Categoria
{
...
/**
* @var string
*/
private $nombre;
...
public function __toString()
{
return $this->nombre;
}
}
你在这里做的是告诉PHP每当你访问对象&#34;分类&#34;作为字符串,您应该使用其名称。因此,当您尝试echo $categoria
或{{ categoria }}
时,PHP会查找__toString
方法并回显您在该方法中返回的内容。
尽管我仍然希望您明确使用{{ categoria.name }}
!