symfony 检查实体属性是否存在

oknwwptz  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(112)

我有一个像example.org/overview/<column>/<value>这样的URL(例如:example.org/overview/color/red),它将导致在列“color”中搜索值“red”。这是实体:

<?php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

// @ORM\Entity(repositoryClass="App\Repository\CarRepository")
class Car
{
    // @ORM\Column(type="string", length=255)
    private $name;
    private $color;

    [...]

我想我应该在开始数据库查询之前检查实体属性是否存在。当有人调用example.org/overview/foo/bar时,我如何检查foo是否是有效的数据库列(=实体属性)?Symfony是否提供了一个简单的解决方案?如果不是这样,我想我必须使用硬编码的白色列表。

7uzetpgm

7uzetpgm1#

你可以这样使用getClassMetadata:

$columns = $em->getClassMetadata(Car::class)->getColumnNames();

if (in_array($property, $columns)) {
   //property exists, code here
}

您也可以尝试:getFieldNames而不是getColumnNames

mcdcgff0

mcdcgff02#

Alessandro是正确的,但确切的方法hasField()存在:

$metaCar = $em->getClassMetadata(Car::class);

if ($metaCar->hasField('foo')) {
   // Property exists.
}

相关问题