я пытаюсь удалить объект по идентификатору из моей базы данных, используя
<button class = "btn btn-danger" (click) = "removeUser()"> Delete</button></td> в интерфейсе, но ссылка не работает. Я получаю сообщение об ошибке:
The identifier id is missing for a query of PrManagerBundle\Entity\eb_user.
вот моя сущность:
namespace PrManagerBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* eb_user
*
* @ORM\Table(name = "eb_user")
* @ORM\Entity(repositoryClass = "PrManagerBundle\Repository\eb_userRepository")
*/
class eb_user
{
/**
* @var int
*
* @ORM\Column(name = "id", type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name = "nom", type = "string", length=255)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name = "prenom", type = "string", length=255)
*/
private $prenom;
/**
* @var int
*
* @ORM\Column(name = "tel", type = "string", nullable = true)
*/
private $tel;
/**
* @var string
*
* @ORM\Column(name = "mail", type = "string", length=255, nullable = true)
*/
private $mail;
/**
* @var string
*
* @ORM\Column(name = "domaine", type = "string", length=255, nullable = true)
*/
private $domaine;
/**
* @ORM\ManyToOne(targetEntity = "PrManagerBundle\Entity\eb_role", inversedBy = "eb_user")
*/
private $x_eb_role;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
*
* @return eb_user
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set prenom
*
* @param string $prenom
*
* @return eb_user
*/
public function setPrenom($prenom)
{
$this->prenom = $prenom;
return $this;
}
/**
* Get prenom
*
* @return string
*/
public function getPrenom()
{
return $this->prenom;
}
/**
* Set tel
*
* @param integer $tel
*
* @return eb_user
*/
public function setTel($tel)
{
$this->tel = $tel;
return $this;
}
/**
* Get tel
*
* @return int
*/
public function getTel()
{
return $this->tel;
}
/**
* Set mail
*
* @param string $mail
*
* @return eb_user
*/
public function setMail($mail)
{
$this->mail = $mail;
return $this;
}
/**
* Get mail
*
* @return string
*/
public function getMail()
{
return $this->mail;
}
/**
* Set domaine
*
* @param string $domaine
*
* @return eb_user
*/
public function setDomaine($domaine)
{
$this->domaine = $domaine;
return $this;
}
/**
* Get domaine
*
* @return string
*/
public function getDomaine()
{
return $this->domaine;
}
/**
* Set xEbRole
*
* @param \PrManagerBundle\Entity\eb_role $xEbRole
*
* @return eb_user
*/
public function setXEbRole(\PrManagerBundle\Entity\eb_role $xEbRole = null)
{
$this->x_eb_role = $xEbRole;
return $this;
}
/**
* Get xEbRole
*
* @return \PrManagerBundle\Entity\eb_role
*/
public function getXEbRole()
{
return $this->x_eb_role;
}
}
контроллер:
public function removeAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$userInfo = json_decode( $request->request->get("user") );
$eb_user = $em->getRepository('PrManagerBundle:eb_user')->find($request->request->get('id'));
$em->remove($eb_user);
$em->flush();
$em->clear();
return $this->returnJsonResponse($eb_user);
/* $repository = $this->getDoctrine()->getRepository(eb_user::class);
$editUser = $repository->find($id);
return $this->returnJsonResponse($editUser);*/
}
и маршрутизация здесь:
pr_manager_remove: путь: /пользователь/удалить/{id} значения по умолчанию: {_controller: PrManagerBundle:User:remove}
На самом деле идентификатор не найден. Я ожидаю, что ссылка работает правильно
@SondreEdvardsen вот компонент, в котором я вызвал сервис removeUser(id){ this.createService.removeUser(id) .subscribe(); } это create service.ts removeUser(id: number): Observable<{}> { return this.http.delete(Statique.DELETE_USER+'/'+id); }
@SondreEdvardsen это Statique.DELETE_USER = 'http://localhost/project-manager/backend/web/app_dev.php/user/remove' в бэкэнде. Я настроил маршрут следующим образом: pr_manager_remove: path: /user/remove/{id} defaults: { _controller: PrManagerBundle:User:remove }
@SondreEdvardsen, а вот HTML: <table class = "table table-striped; mat-elevation-z8" style = "width: 100%;"> <tr> <th>#</th> <th>Nom</th> <th>Prénom</th </tr> <tr *ngFor = "let user of users"> <td>{{user.id}}</td> <td>{{user.nom}}</td> <td><button class = "btn btn-danger" (click) = "removeUser()"> Delete</button></td> </tr>






Вы передаете userId в качестве параметра маршрута. Вот почему он отсутствует в запросе.
Идентификатор должен быть передан в качестве аргумента функции PrManagerBundle:User:remove.
/**
* @Route("/user/remove/{id}", name = "pr_manager_remove")
*/
public function remove($id)
{
...
$eb_user = $em->getRepository('PrManagerBundle:eb_user')->find($id);
...
}
Я получаю другую ошибку: An exception occurred while executing 'SELECT t0.id AS id_1, t0.nom AS nom_2, t0.prenom AS prenom_3, t0.tel AS tel_4, t0.mail AS mail_5, t0.domaine AS domaine_6, t0.x_eb_role_id AS x_eb_role_id_7 FROM eb_user t0 WHERE t0.id = ?' with params ["id"]: SQLSTATE[22P02]: Invalid text representation: 7 ERREUR: syntaxe en entrée invalide pour l'entier : « id »
Теперь параметр выглядит как «id» в виде строки, а не значения переменной $id. Пожалуйста, дважды проверьте наличие опечаток и поделитесь кодом контроллера, если вы все еще получаете ошибки.
Я изменил $id на ('id') в контроллере, но ничего не изменилось. вот UserController: class UserController extends Controller { public function removeAction($id) { $em = $this->getDoctrine()->getManager(); $eb_user = $em->getRepository('PrManagerBundle:eb_user')->find('id'); $em->remove($eb_user); $em->flush(); $em->clear(); return $this->returnJsonResponse($eb_user); } }
->find('id') должно быть ->find($id)
Контроллер не находит идентификатор из вашего запроса. Пожалуйста, поделитесь соответствующим кодом внешнего интерфейса (html/js).