【问题标题】:Doctrine2 Sortable Update PositionDoctrine2 可排序更新位置
【发布时间】:2013-11-22 06:27:13
【问题描述】:

我正在使用带有 Symfony 2.3 和 jQuery UI 可排序的 Doctrine 2。

我有一个可使用 jQuery 排序的元素列表,并且该位置通过 Ajax 请求保存在数据库中。

除了数据持久性之外,一切似乎都完美无缺……元素的位置以及与它相关的其他元素在数据库中的位置是错误的。

例子:

| ID         | POSITION   | TITLE

| 1          | 0          | Element 1

| 2          | 1          | Element 2

| 3          | 2          | Element 3

| 4          | 3          | Element 4

如果我将 ID 3(位置 3)移动到位置 0,我会在数据库中得到这个结果:

| ID         | POSITION   | TITLE

| 1          | 2          | Element 1

| 2          | 2          | Element 2

| 3          | 0          | Element 3

| 4          | 4          | Element 4

我检查了一下,插入的值是正确的(0)。

我正在使用此代码来更新位置:

$pyramid = $this->getDoctrine()->getRepository('MarquisWebsiteBundle:Pyramid')->find($id);
$pyramid->setPosition($position);
$em->persist($pyramid);
$em->flush();

如果我将元素 1 从位置 0 移动到位置 1,效果会很好。

我没有在这张桌子上使用任何SortableGroup

编辑:

我正在使用 StofDoctrineExtensionsBundle 和 Gedmo DoctrineExtension,这是配置:

doctrine:
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
        mappings:
            gedmo_sortable:
                type: annotation
                prefix: Gedmo\Sortable\Entity
                dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Sortable/Entity"
                alias: GedmoSortable
                is_bundle: false
            gedmo_translatable:
                type: annotation
                prefix: Gedmo\Translatable\Entity
                dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
                alias: GedmoTranslatable
                is_bundle: false

stof_doctrine_extensions:
    default_locale: en_GB
    translation_fallback: true
    orm:
        default:
            sortable: true
            translatable: true

和实体(Pyramid.orm.yml):

Acme\DemoBundle\Entity\Pyramid:
    type: entity
    table: pyramid
    fields:
        id:
            id: true
            type: integer
            unsigned: false
            nullable: false
            generator:
                strategy: IDENTITY
        position:
            type: integer
            unsigned: false
            nullable: false
            gedmo:
              - sortablePosition
        title:
            type: string
            length: 255
            fixed: false
            nullable: false

我认为我不需要更改 Pyramid.php 类中的任何内容,如下所示:

/**
 * Pyramid
 *
 * @ORM\Table(name="pyramid")
 * @ORM\Entity
 */
class Pyramid
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="position", type="integer", nullable=false)
     */
    private $position;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255, nullable=false)
     */
    private $title;

【问题讨论】:

  • 你在使用 Gedmo\DoctrineExtensions 和 StofDoctrineExtensions 吗?请提供更多代码 - 实体、映射、...
  • 感谢您的帮助。我刚刚在问题帖子中添加了更多信息。
  • 你有没有想过这个?
  • 不,很遗憾...我没有在 Symfony 上全职工作,现在转到了其他项目。但是,如果有人找到解决方案,我会很高兴知道!
  • 我想看看你使用的 jQuery 代码。你能提供它@pjehan吗?提前致谢!我需要一个类似的场景。也许我会找到解决办法。

标签: jquery-ui symfony doctrine-orm jquery-ui-sortable


【解决方案1】:

我认为您需要包含SortablePosition 注释:

/**
 * @Gedmo\SortablePosition
 * @ORM\Column(name="position", type="integer", nullable=false)
 */
private $position;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2011-02-28
    • 2011-06-24
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多