我目前正在從事一個大學專案,我決定將 Symfony 與 API 平臺一起使用來制作 API。該專案的目標是學習一項新技術。
這里我有一個簡單的資料庫,它有一個“用戶”表。這個“用戶”表有一個“電子郵件”欄位。我想設定一個 API 平臺端點來通過電子郵件搜索用戶,而不是他們的確切電子郵件。結果將是一個如下所示的 SQL 查詢:
SELECT * FROM users WHERE email LIKE "%keyword%"
這是我在 API Platform 中的自定義路由:
'search' => [
'pagination_enabled' => false,
'path' => 'search',
'method' => 'get',
'controller' => SearchController::class,
'read' => false,
'filters' => [],
'openapi_context' => [
'summary' => 'Rechercher des utilisateurs dans la bdd',
'parameters' => [
[
'in' => 'query',
'name' => 'keyword',
'schema' => [
'type' => 'string'
]
]
]
]
]
這是我當前的自定義控制器:
<?php
namespace App\Controller;
use App\Entity\User;
use App\Repository\UserRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpKernel\Attribute\AsController;
#[AsController]
class SearchController
{
public function __construct(private UserRepository $userRepository)
{
}
public function __invoke(Request $request)
{
return $this->userRepository->findBy(["email" => $request->get('keyword')]);
}
}
?>
該控制器作業正常,但我需要將整個“電子郵件”指定為“關鍵字”才能獲得結果。
謝謝 !我希望有人能夠幫助我,因為我被困在這里。
uj5u.com熱心網友回復:
該findBy方法回傳完全匹配的結果,如有必要,使用存盤庫創建您自己的查詢
創建一個 UserRepository 類
// src/Repository/UserRepository.php
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class UserRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, User::class);
}
public function findByEmail($email)
{
return $this->createQueryBuilder('u')
->where('u.email LIKE :email')
->setParameter('email', '%'.$email.'%')
->getQuery()
->getResult();
}
}
接下來,將創建的存盤庫類連接到您的User物體
/**
* Entity User
* @package App\Entity
* @ORM\Entity(repositoryClass=UserRepository::class) // add this line
* @ORM\Table(name="user")
*/
class User
就是這樣,現在你將有一個新方法findByEmail
public function __invoke(Request $request)
{
return $this->userRepository->findByEmail($request->get('keyword'));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441825.html
標籤:php sql 交响乐 api-platform.com
上一篇:水平計算
下一篇:將復雜字串轉換為日期
