我有一个与自身有关的实体.该实体具有字段:父级和子级.
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) 我有一些资源,让我们称之为 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 修改查询数据。
我按照 RESTful 标准创建应用程序。我知道什么时候应该使用 GET 操作,什么时候应该使用 POST 或 PUT 等。
但现在我有具体的案例。我不想发送任何数据到操作,也不想接收任何数据。我只想向服务器询问特殊地址,并且操作会做一些工作。只能返回 204 状态(无内容),仅此而已。在这种情况下我应该使用 GET 方法吗?或者有什么不同?
我有一个使用我的附加包的项目.此捆绑包连接到其他数据库,我需要配置另一个数据库.
我希望在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) 我想要计算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()并转储此输出它也是字符串,而不是整数.
如何将此值作为整数?有可能的?
我有2个具有相同字段的实体-父级,子级,顺序。实际上,这是一种机制,这3个字段不适用于该实体的内容,例如名称,标题,类别等。
我想将此字段设置为一个地方,一个班级,并且正在考虑将其放在哪里。应该是抽象类吗?还是我应该做个特质?
我也可以使用ORM \ Discriminator机制,但是我认为这是为了其他目的,而不是我想做的事情。
在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)
但也许我可以做得更好.我可以吗?
symfony ×5
php ×4
doctrine ×3
doctrine-orm ×2
rest ×2
fixtures ×1
javascript ×1
react-query ×1
reactjs ×1