首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原则symfony2错误:类Cocina\ComprasBundle\Entity\Productos没有名为proveedores的关联

原则symfony2错误:类Cocina\ComprasBundle\Entity\Productos没有名为proveedores的关联
EN

Stack Overflow用户
提问于 2016-10-08 17:31:19
回答 2查看 42关注 0票数 0

我正在修改由symfony 2.8中的教义产生的CRUD。我有两个表(proveedores( providers )和productos( products )),其关系为1:n。我希望通过索引操作显示它拥有的产品的完整列表。我尝试的是创建一个DQL语句,将结果中的两个表连接起来,然后用树枝操作它。当我试图访问索引时,我会得到提到的错误。

语义错误行0,col 75靠近“x”:Error:类Cocina\ComprasBundle\Entity\Productos没有名为proveedores的关联 2/2 QueryException:语义错误行0,col 75靠近'x ':Error:类Cocina\ComprasBundle\Entity\Productos没有名为proveedores的关联 1/2 QueryException:从ComprasBundle选择p,x:Productos p联接p.proveedores x

我在这里修改了另一个类似的线程,但我没有找到解决方案。我已经检查过了,清除了所有的理论缓存和symfony缓存,但什么也没有。谢谢你的回答。

实体PROVEEDORES

代码语言:javascript
运行
复制
namespace Cocina\ComprasBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Proveedores
 *
 * @ORM\Table(name="proveedores")
 * @ORM\Entity(repositoryClass="Cocina\ComprasBundle\Repository\ProveedoresRepository")
 */
class Proveedores
{
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="nombre", type="string", length=255, unique=true)
...
}

实体产品

名称空间Cocina\ComprasBundle\Entity;

代码语言:javascript
运行
复制
use Doctrine\ORM\Mapping as ORM;

/**
 * Productos
 *
 * @ORM\Table(name="productos")
 * @ORM\Entity(repositoryClass="Cocina\ComprasBundle\Repository\ProductosRepository")
 */
class Productos
{
/**
 * @var integer $idProveedor
 * @ORM\ManyToOne(targetEntity="Proveedores")
 * @ORM\JoinColumn(name="id_proveedor_id", referencedColumnName="id")
 */
private $idProveedor;

...
}

PRODUCTOS储存库

代码语言:javascript
运行
复制
namespace Cocina\ComprasBundle\Repository;

use Doctrine\ORM\EntityRepository;

/**
 * ProductosRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ProductosRepository extends EntityRepository
{
public function findListaProductos()
{
    $em=$this->getEntityManager();
    $consulta=$em->createQuery('
            SELECT p,x
            FROM ComprasBundle:Productos p 
            JOIN p.proveedores x            
            ');
    return $consulta->getResult();
}
}

控制器

代码语言:javascript
运行
复制
namespace Cocina\ComprasBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Cocina\ComprasBundle\Entity\Productos;
use Cocina\ComprasBundle\Form\ProductosType;

/**
 * Productos controller.
 *
 */
class ProductosController extends Controller
{
/**
 * Lists all Productos entities.
 *
 */
public function indexAction()
{
    $em = $this->getDoctrine()->getManager();

    //$productos = $em->getRepository('ComprasBundle:Productos')->findAll();
    $productos=$em->getRepository('ComprasBundle:Productos')->findListaProductos()->getResult();

    return $this->render('ComprasBundle:productos:index.html.twig', array(
        'productos' => $productos,
    ));
}

关系图式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-08 18:43:02

在Entity中,关系名为idProveedor,而不是proveedores。因此,请尝试以下查询:

代码语言:javascript
运行
复制
public function findListaProductos()
{
    $em=$this->getEntityManager();
    $consulta=$em->createQuery('
            SELECT p,x
            FROM ComprasBundle:Productos p 
            JOIN p.idProveedor x            
            ');
    return $consulta->getResult();
}

希望这能有所帮助

注意:正如前面的评论所示,最好将查询中的关系重命名为proveedores。

票数 0
EN

Stack Overflow用户

发布于 2016-10-08 18:05:43

看来你没有正确地加入。应该是这样的:从tablename内部加入tablename.someid = othertablename.someid上的其他tablename。

然而,有了教条,你就不需要那么做了。你可以从你的实体调用一个函数。

。您应该生成getter和setter。(类似于php /控制台理论:生成:AppBundle实体)。

然后,您只需查询您的产品(伪代码没有测试)。

代码语言:javascript
运行
复制
     $productos = $this->getDoctrine()
    ->getRepository('ComprasBundle:Productos')
    ->findAll() or fetchAll();

然后你的物品里就有了你的证据。它可能返回一个对象数组。伪码:

代码语言:javascript
运行
复制
      $firstproductprovidername  = $productos[0]->getProveedores()->getName();
      $firstproductproviderid  = $productos[0]->getProveedores()->getId();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39935308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档