gpt4 book ai didi

javascript - Symfony 4/javascript - 关系上的 UniqueEntity 约束

转载 作者:行者123 更新时间:2023-12-01 01:20:02 24 4
gpt4 key购买 nike

我正在使用 Symfony 4.2 表单进行管理员注册。我的管理实体与城市实体具有一对一的双向关系。当用户提供的城市已绑定(bind)到现有管理员时,我想向用户提供错误消息。首先,我尝试使用与其他实体中防止重复电子邮件相同的方法。我在两个实体中都添加了 UniqueEntity 约束,并在模板中为表单错误留出了空间。

管理.php

 /**
* @ORM\Entity(repositoryClass="App\Repository\AdminRepository")
* * @UniqueEntity(
* fields={"city"},
* message="error message here"
* )
* @Vich\Uploadable
*/
class Admin
{ ... }

城市.php

/**
*
* @ORM\Table(name="city")
* @ORM\Entity
* @UniqueEntity(
* fields={"admin"},
* message="error message here"
* )
*/
class City
{...}

(我想注释语法是不同的,因为管理表是几个月前创建的,当时我还在 Symfony 4.0 上)

但我一定遗漏了一些东西,或者它与关系的工作方式不同,因为我仍然收到 SQL 错误消息页面“SQLSTATE[23000]: 完整性约束违规: 1062 键 'UNIQ_3946A254A73F0036' 的重复条目 '1'”。

我还想到了一种 JavaScript 方法来调用数据库并检查用户提供的城市是否已经与管理员关联,这会更好,因为没有刷新等等,但我无法检索结果根据我的要求。

客户端,在 keyup 上调用

function cityRequest(){
var cityCode = document.getElementById("city").value;
if(cityCode) {
$.ajax({
type: 'post',
url: "{{ path('checkCity')}}",
data: {
city_code:cityCode,
},
success: function (response) {
$('#cityMsg').html(response);
}
});
} else {
...
}
}

请求 Controller

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

class AjaxController extends AbstractController
{
/**
* @Route("/ajaxrequest", name="checkCity", methods="GET|POST")
*/
public function checkCity(Request $request)
{
$code= $request->get('city_code');
$response = new JsonResponse(array(
'message' => $code));
return $response;
}
}

在响应中,“消息”显示 null,但我希望它是用户输入的字符串(然后我可以继续获取我的城市并检查现有管理员...)

由于我对这两种方法都感到困惑,非常感谢您的帮助..谢谢!

最佳答案

所以你有两种方法可以做到这一点

第一个:

//City.php
/**
* @UniqueEntity(
* fields={"admin"},
repositoryMethod = "findAdmin"),
* message="error message here"
* )
*/
class City
{...}





//CityRepository.php
public function findAdmin($admin)
{
return $this->createQueryBuilder('c')->leftJoin('c.admin', 'a')
->andWhere('a = :admin')
->setParameter('admin', $admin)
->getQuery()
->getResult()
;
}


//YourController.php
if($formAdmin->isSubmitted())
{
$repoAdmin = $this->getDoctrine()->getRepository(Admin::class);
$repoCity = $this->getDoctrine()->getRepository(City::class);
$city->setAdmin($admin);
if($formAdmin->isValid()){
$admin->setCity($city)

$em = $this->getDoctrine()->getManager();
$em->persist($admin);
$em->persist($city);`enter code here`
$em->flush();
}
}

第二个:

//YourController.php
if($formAdmin->isSubmitted())
{
$repoAdmin = $this->getDoctrine()->getRepository(Admin::class);
$repoCity = $this->getDoctrine()->getRepository(City::class);
$city->setAdmin($admin);
if($formAdmin->isValid() && $admin->getCity()==null){ //you just add this controller, it is a controller check level
$admin->setCity($city)

$em = $this->getDoctrine()->getManager();
$em->persist($admin);
$em->persist($city);
$em->flush();
}
}

关于javascript - Symfony 4/javascript - 关系上的 UniqueEntity 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54314964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com