左派加入主义和象征主义

  • 本文关键字: symfony doctrine-orm
  • 更新时间 :
  • 英文 :


嗨,我正在尝试用教条做一个左加入Symfony。我已经尽力去做了,但是我的尝试失败了。这是我想要执行的MySQL代码。

SELECT alben.name,alben.alben_id
FROM alben
LEFT JOIN video
ON alben.alben_id =video.album

在实体"视频"中,我这样定义$album。

/**
 * @var Contentuser
 *
 * @ORMManyToOne(targetEntity="Album")
 * @ORMJoinColumns({
 *   @ORMJoinColumn(name="album", referencedColumnName="alben_id")
 * })
 */

我在实体文件夹中创建了一个VideoRepository。

$qm = $this->createQueryBuilder()
        ->select("alben.name,alben.alben_id")
        ->from("alben")
        ->leftJoin("video","video","alben.alben_id =video.album");
        return $qm->getQuery()->getResult();

这是控制器部分:

$em=$this->getDoctrine()->getManager();
    $videoRepo=$em->getRepository('AppBundle:Video');
    $videos=$videoRepo->VideoLeftJoin();

我收到这个错误"未定义的方法"VideoLeftJoin"。方法名称必须以findBy或findOneBy开头!"所以我尝试添加"findBy",但没有成功。

提前感谢。

你错过了"WITH"吗?

$qm = $this->createQueryBuilder()
->select("alben.name","alben.alben_id") 
->from("alben") 
->leftJoin("video","video", "WITH", "alben.alben_id =video.album");
return $qm->getQuery()->getResult();

你必须告诉条令有储存库:

在yaml:repositoryClass:AppBundleEntityVideoRepo

在注释中:

use DoctrineORMMapping as ORM;
/**
 * @ORMEntity(repositoryClass="AppBundleEntityVideoRepository")
 */
class Video
{
    //...
}

请确保在这个VideoRepository类中将VideoLeftJoin方法定义为public。

您需要告诉条令将哪个存储库类用于相应的实体类,否则条令将使用其默认存储库类。修改Video实体中的Entity注释:

/**
 * @ORMEntity(repositoryClass="VideoRepositoryClassNameWithNamespace")
 * @ORMTable
 */
class Video
{
...

其中,VideoRepositoryClassNameWithNamespace是指向存储库类的完整路径。您必须自己定义VideoLeftJoin方法。

此外,请检查数据库和条令以及查询生成器文档。

下面的错误只是说

未定义的方法"VideoLeftJoin"。

然后建议您使用一种预定义的方法,即

方法名称必须以findBy或findOneBy开头!

解决此错误

确保函数VideoLeftJoin在您的视频存储库中。以下是如何创建它的示例。

 public function VideoLeftJoin()
   {
     return $this
        ->createQueryBuilder()
        ->select("alben.name,alben.alben_id")
         ->from("alben")
        ->leftJoin("video","video","alben.alben_id =video.album");
        ->getQuery()
        ->getResult();
   }

相关内容

  • 没有找到相关文章

最新更新