小编Kam*_*l P的帖子

symfony2 doctrine - 将子项添加到自相关实体

我有一个与自身有关的实体.该实体具有字段:父级子级.

class A
{
    // ...

    /**
     * @var A
     * @ORM\ManyToOne(targetEntity="A", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
     */
    protected $parent;

    /**
     * @var A[]
     * @ORM\OneToMany(targetEntity="A", mappedBy="parent", cascade={"all"}, orphanRemoval=true)
     */
    protected $children;
}
Run Code Online (Sandbox Code Playgroud)

我想通过在表单中​​设置子项来将子项添加到此实体.此实体类型如下所示:

class AType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('children', 'collection', [
                'type' => new AType(),
                'allow_add' => true,
                'allow_delete' => true,
                'by_reference' => false,
                'prototype' => true,
            ])
        ;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我发送这样的数据时:

'a' => [
    [ …
Run Code Online (Sandbox Code Playgroud)

php rest doctrine symfony doctrine-orm

6
推荐指数
1
解决办法
784
查看次数

react-query - 带分页的 getQueryData 和 setQueryData

我有一些资源,让我们称之为 todos

我有它的列表,用户可以从列表中删除。

在我实现看起来像的 paginaiton 之前

const {data} = useQuery('todos', fetchTodos)
Run Code Online (Sandbox Code Playgroud)

在我删除它的其他地方

  const [deleteTodo, deletingMutation] = useMutation(
    (id) => deleteTodo(id),
    {
      onSuccess: (data, deletedTodoId) => {
        const { todos } = queryCache.getQueryData<any>('todos');

        queryCache.setQueryData('todos', {
          todos: todos.filter(todo=>todo.id !== deletedTodoId),
        });
      },
    });
Run Code Online (Sandbox Code Playgroud)

所以在其他地方我只是修改这个名为的数据集 'todos'

但是在我实现 paginaiton 之后,事情变得更加复杂,因为 QueryKey 现在不仅仅是 'todos'而是['todos', page]

所以当我删除 todo 并调用onSuccess此代码时queryCache.getQueryData<any>('todos');,它会返回我undefined- 因为 QueryKey 还包含此页码。

我该如何解决?使用分页的 QueryKey 修改查询数据。

javascript reactjs react-query

6
推荐指数
1
解决办法
2809
查看次数

RESTful API 设计 - 执行操作

我按照 RESTful 标准创建应用程序。我知道什么时候应该使用 GET 操作,什么时候应该使用 POST 或 PUT 等。

但现在我有具体的案例。我不想发送任何数据到操作,也不想接收任何数据。我只想向服务器询问特殊地址,并且操作会做一些工作。只能返回 204 状态(无内容),仅此而已。在这种情况下我应该使用 GET 方法吗?或者有什么不同?

rest restful-architecture

5
推荐指数
1
解决办法
3306
查看次数

Symfony2 - bundle中的doctrine连接配置

我有一个使用我的附加包的项目.此捆绑包连接到其他数据库,我需要配置另一个数据库.

我希望在2个配置文件中建立此连接.

主配置:

# ROOT/app/config/config.yml:
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
Run Code Online (Sandbox Code Playgroud)

捆绑配置:

# src/SecondBundle/Resources/config/config.yml
doctrine:
    dbal:
        connections:
            secondBundle:
                driver:   "%secondBundle.database_driver%"
                host:     "%secondBundle.database_host%"
                port:     "%secondBundle.database_port%"
                dbname:   "%secondBundle.database_name%"
                user:     "%secondBundle.database_user%"
                password: "%secondBundle.database_password%"
                charset:  UTF8
Run Code Online (Sandbox Code Playgroud)

捆绑扩展文件:

class SecondBundleExtension extends Extension
{
    /**
     * {@inheritdoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('config.yml');
    }
} …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony

5
推荐指数
2
解决办法
1016
查看次数

Symfony2 Doctrine将整数计为整数

我想要计算DB中的所有记录.我没有找到一种推荐的方法来做到这一点.所以我在我的实体repo中构建了这个函数:

public function countAll()
{
    return $this->createQueryBuilder('post')
        ->select('COUNT(post)')
        ->getQuery()->getSingleScalarResult()
        ;
}
Run Code Online (Sandbox Code Playgroud)

它没关系,因为它返回了我所有项目的数量.我使用FOSRestBundle,所以我在控制器中的动作如下:

public function getPostsCountAction() {
    return $this->em->getRepository('KamilTestBundle:Post')->countAll();
}
Run Code Online (Sandbox Code Playgroud)

和结果在addres posts/count.json看起来像:

"16"
Run Code Online (Sandbox Code Playgroud)

但是......我想把这个值当作整数.我不知道为什么QueryBuilder将其作为字符串返回.即使我使用 - > getQuery() - > getResult()并转储此输出它也是字符串,而不是整数.

如何将此值作为整数?有可能的?

php query-builder symfony doctrine-orm

2
推荐指数
1
解决办法
4307
查看次数

Symfony2-扩展实体,抽象实体

我有2个具有相同字段的实体-父级,子级,顺序。实际上,这是一种机制,这3个字段不适用于该实体的内容,例如名称,标题,类别等。

我想将此字段设置为一个地方,一个班级,并且正在考虑将其放在哪里。应该是抽象类吗?还是我应该做个特质?

我也可以使用ORM \ Discriminator机制,但是我认为这是为了其他目的,而不是我想做的事情。

php symfony

2
推荐指数
1
解决办法
3128
查看次数

Symfony2灯具订单 - 更好的方式

在DoctrineFixturesBundle中,如果我想按指定的顺序执行fixtures,我必须在任何fixture类方法中创建如下:

public function getOrder()
{
    return 2;
}
Run Code Online (Sandbox Code Playgroud)

指定订单并不舒服.

在Laravel Framework中,我可以这样做:

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call('PositionsSeeder');
        $this->call('UsersSeeder');
        $this->call('PostsSeeder');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以在symfony中这样做吗?

我看到一个解决方案.我可以使用以下代码制作BaseFixture:

class LoadBrandData extends AbstractFixture
{
    public function load(ObjectManager $manager)
    {
        (new LoadPositionsData())->load(manager);
        (new LoadUsersData())->load(manager);
        (new LoadPostsData())->load(manager);

    }
}
Run Code Online (Sandbox Code Playgroud)

但也许我可以做得更好.我可以吗?

doctrine fixtures symfony

1
推荐指数
2
解决办法
1493
查看次数