嗨,我正在尝试用教条做一个左加入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();
}