【问题标题】:EasyAdmin 3: List view shows only one entity, count = 3EasyAdmin 3:列表视图仅显示一个实体,计数 = 3
【发布时间】:2020-09-23 20:37:16
【问题描述】:

通过联合继承映射到用户实体的代表实体在列表视图中显示计数为 3,但仅显示一个。代表也与非营利实体存在多对一关系。需要做什么才能向所有三位代表展示?

数据库查询序列(在分析器中看到)显示了 6 个查询中的第 6 个,以返回列表视图中代表的非营利组织的 ID。我怀疑这与只显示一个代表这一事实密切相关。

编辑:此行为在 EA2 中不会发生。仅在迁移到 EA3 之后。

编辑 #2:在 EA2 中有 10 个数据库查询,而在 EA3 中只有 6 个。不同之处在于,在 EA2 中有对 id 为 1、2 和 3 的非营利组织属性的查询;在 EA3 中,仅查询 id 为 3 的非营利组织的属性。

截图:

代表实体(sn-p):

/**
 * @ORM\Table(name="staff")
 * @ORM\Entity
 */
class Representative extends User
{
...
    /**
     * @ORM\ManyToOne(targetEntity="Nonprofit", inversedBy="reps", cascade={"persist", "remove"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="orgId", referencedColumnName="id")
     * })
     */
    protected $nonprofit;
...
}

用户实体(sn-p):


/**
 * @ORM\Table(name="usertable")
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"rep" = "Representative", "volunteer" = "Volunteer", "admin" = "Admin"})
 */
abstract class User implements UserInterface
{
...
}

代表 CRUD 控制器:

class RepresentativeCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return Representative::class;
    }

    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->setPageTitle(Crud::PAGE_EDIT, 'Edit %entity_name%')
            ->setHelp('index', 'Locking staff deactivates nonprofit and blocks staff log in. Replacing also removes current staff.')
            ->setSearchFields(['id', 'roles', 'email', 'fname', 'sname', 'confirmationToken', 'replacementStatus']);
    }

    public function configureActions(Actions $actions): Actions
    {
        return $actions
            ->disable('new', 'edit', 'delete');
    }

    public function configureFields(string $pageName): iterable
    {
        $roles = ArrayField::new('roles');
        $password = TextField::new('password');
        $email = TextField::new('email');
        $fname = TextField::new('fname');
        $sname = TextField::new('sname');
        $lastLogin = DateTimeField::new('lastLogin');
        $confirmationToken = TextField::new('confirmationToken');
        $tokenExpiresAt = DateTimeField::new('tokenExpiresAt');
        $locked = BooleanField::new('locked');
        $enabled = BooleanField::new('enabled');
        $replacementStatus = TextField::new('replacementStatus');
        $initiated = DateField::new('initiated');
        $completed = DateField::new('completed');
        $nonprofit = AssociationField::new('nonprofit');
        $id = IntegerField::new('id', 'ID');
        $replace = TextareaField::new('replace')->setTemplatePath('Admin/replace_staff.html.twig');
        $fullName = TextareaField::new('fullName');
        $orgname = TextareaField::new('orgname');

        if (Crud::PAGE_INDEX === $pageName) {
            return [$replace, $fullName, $email, $orgname];
        } elseif (Crud::PAGE_DETAIL === $pageName) {
            return [$id, $roles, $password, $email, $fname, $sname, $lastLogin, $confirmationToken, $tokenExpiresAt, $locked, $enabled, $replacementStatus, $initiated, $completed, $nonprofit];
        } elseif (Crud::PAGE_NEW === $pageName) {
            return [$roles, $password, $email, $fname, $sname, $lastLogin, $confirmationToken, $tokenExpiresAt, $locked, $enabled, $replacementStatus, $initiated, $completed, $nonprofit];
        } elseif (Crud::PAGE_EDIT === $pageName) {
            return [$roles, $password, $email, $fname, $sname, $lastLogin, $confirmationToken, $tokenExpiresAt, $locked, $enabled, $replacementStatus, $initiated, $completed, $nonprofit];
        }
    }
}

【问题讨论】:

    标签: php symfony easyadmin


    【解决方案1】:

    正如GitHub 所述,我假设您的主键属性是私有的。对其进行保护应该可以解决问题。

    /**
     * @ORM\Table(name="usertable")
     * @ORM\Entity
     * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
     * @ORM\InheritanceType("JOINED")
     * @ORM\DiscriminatorColumn(name="type", type="string")
     * @ORM\DiscriminatorMap({"rep" = "Representative", "volunteer" = "Volunteer", "admin" = "Admin"})
     */
    abstract class User implements UserInterface
    {
        protected $id;
    }
    

    【讨论】:

    • 优秀!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2021-08-26
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多