symfony - 在 symfony 4 中如何以及在何处执行自定义查询
问题描述
我正在使用一个像这样扩展ServiceEntityRepository的实体类:
class Sms extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Sms::class);
}
...
}
所以当我需要在我的控制器文件中持久化实体类的实例时,我需要将 ManagerRegistry 作为我的实体类的参数传递,但我找不到ManagerRegistry
在我的控制器中访问它的方法。
谁能帮忙?
解决方案
问题是ServiceEntityRepository应该在存储库类中扩展,而不是实体类。正如这里提到的,对于从现有数据库自动生成存储库没有很好的描述。这是我的实体类及其注释:
/**
* Sms
*
* @ORM\Table(name="sms")
* @ORM\Entity(repositoryClass="App\Repository\SMSRepository")
*/
class Sms
{ ... }
这一行非常重要:@ORM\Entity(repositoryClass="App\Repository\SMSRepository")
另一个重要的事情是从 services.YAML 文件中的排除中删除实体。
如果您通过注释为实体类的存储库设置名称,则通过运行此命令,您将生成存储库:
php bin\console make:entity --regenerate
您可以在上述命令生成的存储库文件中简单地编写复杂的查询。
要调用存储库类的方法,您可以在控制器文件中使用它:
$this->getDoctrine()->getRepository(EntityFile::class)->youFunctionNameInRepositoryFile()
请注意 getRepository 的参数,它是实体文件,而不是存储库文件。
推荐阅读
- c - 释放时填充结构数据会导致段错误
- machine-learning - dtreeviz 中的子树可视化
- tensorflow - cnn中的tf.nn.softmax是什么意思
- java - RepeatedHeaderTableDrawer 不显示多个页面中的所有行
- arrays - 如何在不使用数组和字符数组的情况下比较两个字符串变量字符,以便在 java 中比较这个目的 int 位?
- xamarin - 我有一个收藏视图中的选择器,但我不确定如何获取价值
- r - 如何在 R 中运行 Kruskal-Wallis 或 Mann-Whitney 检验?
- azure-functions - 如何在函数应用的 ARM 模板中引用现有存储帐户
- python - plt.save 不创建 png 文件
- git - 尝试克隆 git repo 时,AWS 上的 Jenkins 超时