Api平台按空值筛选



我正在寻找一个解决方案,根据null(用户(的参数恢复get中的数据:

{
"@context": "/api/contexts/ShippingCost",
"@id": "/api/shipping_costs",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "/api/shipping_costs/1",
"@type": "ShippingCost",
"id": 1,
"minWeight": 0,
"maxWeight": 251,
"france": 4.87,
"domTom": 4.21,
"aerial": 3.84,
"zone": {
"@id": "/api/zones/1",
"@type": "Zone",
"id": 1,
"name": "Guadeloupe",
"TaxFOB": 35,
"TaxSurete": 0.2,
"TaxFuel": 0.77,
"TaxGuerre": 0.24,
"Lta": 0,
"InfoDouane": 24,
"CreditEnlevement": 0,
"EntreposageCci": 0.4,
"EntreposageCciMin": 15,
"RemiseDoc": 43,
"Surete": 0,
"AvanceFond": 0,
"Tid": 13,
"Spia": 10,
"InterTransite": 50
},
"user": null
},
{
"@id": "/api/shipping_costs/162",
"@type": "ShippingCost",
"id": 162,
"minWeight": 0,
"maxWeight": 250,
"france": 3,
"domTom": 5,
"aerial": 4,
"zone": {
"@id": "/api/zones/4",
"@type": "Zone",
"id": 4,
"name": "Guyane",
"TaxFOB": 30,
"TaxSurete": 0.2,
"TaxFuel": 0.77,
"TaxGuerre": 0.24,
"Lta": 34.1,
"InfoDouane": 24,
"CreditEnlevement": 0,
"EntreposageCci": 0.4,
"EntreposageCciMin": 6,
"RemiseDoc": 34.5,
"Surete": 0,
"AvanceFond": 0,
"Tid": 0,
"Spia": 0,
"InterTransite": 10
},
"user": "/api/customers/153"
},

目前它检索表中的所有数据,而我只想在GET中恢复user=null 的所有数据

您知道API平台需要什么样的参数才能做到这一点吗?。

我的实体:

/**
* @ApiResource(
*     attributes={"pagination_enabled"=false},
*     collectionOperations={
*      "get"={
*             "method"="GET",
*             "normalization_context"={"groups"={"shippingGet", "shippingGetCollection"}},
*             "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')"
*         },
*         "getCustomPrices"={
*             "method"="GET",
*             "normalization_context"={"groups"={"shippingGetCustomPrice"}},
*             "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')",
*              "path"="/shipping_costs/{userId}/customPrices",
*             "route_name"="get_shipping_costs_userid",
*             "controller"="AppControllerShippingCostsController",
*             "swagger_context" = {
*                         "parameters" = {
*                             {
*                                 "name" = "userId",
*                                 "in" = "query",
*                                 "description" = "ID customer",
*                                 "type" : "string",
*                             }
*                         }
*                      }
*                 },
*         "post"={
*             "method"="POST",
*             "normalization_context"={"groups"={"shippingPost"}},
*             "access_control"="is_granted('ROLE_ADMIN')"
*         }
*     },
*     itemOperations={
*         "getItem"={
*             "method"="GET",
*             "normalization_context"={"groups"={"shippingGet", "shippingGetItem"}},
*             "access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_CUSTOMER')"
*         },
*         "delete"={
*             "method"="DELETE",
*             "normalization_context"={"groups"={"shippingDelete"}},
*             "access_control"="is_granted('ROLE_ADMIN')"
*         },
*         "put"={
*             "method"="PUT",
*             "normalization_context"={"groups"={"shippingPost"}},
*             "access_control"="is_granted('ROLE_ADMIN')"
*         }
*     }
* )
* @ORMEntity(repositoryClass="AppRepositoryShippingCostRepository")
*/
class ShippingCost
{

谢谢你的帮助。

"exists筛选器允许您根据可为null的字段值选择项">

您可以将现有过滤器添加到Entity类中,如下所示:

// ..
use ApiPlatformCoreBridgeDoctrineOrmFilterExistsFilter;
/**
* @ApiResource(
* ..
* )
* @ApiFilter(ExistsFilter::class, properties={"user"})
*/
class ShippingCost

然后你可以用类似的东西来取它们:

https://localhost:8443/api/shipping_costs?exists[user]=false。

过滤器使用带有@ApiFilter标记的Entity类型的方法GET在所有collectionOperations的默认DataProvider上工作。无论何时,它也将对您的操作起作用;getCustomPrices"取决于控制器是否使用所提供的数据。但是因为它在你的ApiResource标签中的配置不包含";读取"=我想是假的。

最新更新