Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不支持嵌套数据结构吗? #18

Open
mozeat-sun opened this issue Oct 13, 2018 · 15 comments
Open

不支持嵌套数据结构吗? #18

mozeat-sun opened this issue Oct 13, 2018 · 15 comments

Comments

@mozeat-sun
Copy link

struct Title
{
int t;
std::string code;
};

struct person
{
int id;
std::string name;
int age;
Title title;
};
这时候 REFLECTION是什么样子的?

@qicosmos
Copy link
Owner

支持嵌套,你看下iguana里的例子

@mozeat-sun
Copy link
Author

....\database\ormpp-master/utility.hpp:88:57: error: no matching function for call to 'type_to_name(ormpp::identity<Title>)'
case DBType::sqlite : s = ormpp_sqlite::type_to_name(identity{});
~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~

@mozeat-sun
Copy link
Author

REFLECTION(person, id, name, age,title) 直接报错,

@qicosmos
Copy link
Owner

title也要写reflection

@mozeat-sun
Copy link
Author

struct Title
{
int t;
};
REFLECTION(Title, t)

struct person
{
int id;
std::string name;
int age;
Title title;
};
REFLECTION(person, id, name, age,title)

....\database\ormpp-master/utility.hpp:88:57: error: no matching function for call to 'type_to_name(ormpp::identity<Title>)'

我已经reflection了,

@qicosmos
Copy link
Owner

qicosmos commented Oct 15, 2018

ormpp不支持结构体嵌套,ormpp里面的结构体和数据库表是对应的,不应该有嵌套情况。iguana序列化本身是支持嵌套的。

@mozeat-sun
Copy link
Author

那是不是太局限了?

@qicosmos
Copy link
Owner

数据库的表本身不能嵌套其他表啊,你加嵌套上去做什么呢,加上去了没法和数据表做映射了。

@mozeat-sun
Copy link
Author

恩,这是个好问题。很多人不关心数据库如何存,存什么格式。只关心,存对应的数据结构和能取出对应的结构体,

@joshuafc
Copy link

在ruby on rails里,数据表A里嵌套另一个数据表B的时候,指的是A的字段里有B的ID,在查询A的时候,顺便也根据A里B_id的值,把B查询出来.

Rails 支持六种关联:
belongs_to
has_one
has_many
has_many :through
has_one :through
has_and_belongs_to_many

struct Title
{
    int t;
};
REFLECTION(Title, t)
struct person
{
    int id;
    std::string name;
    int age;
    Title title;
};
REFLECTION(person, id, name, age,title)

如果这样对应has_one关联的话,person的title字段实际存的是一个int,值为对应Title表里的一个记录的主键id

相关介绍可见
https://rails.guide/book/association_basics.html#active-record-associations

如果能实现这样的操作,数据库相关的操作真的就非常方便了

@joshuafc
Copy link

这个库做了相应尝试,不过看起来使用起来太繁琐. https://github.com/bmuller/StactiveRecord

@newdee
Copy link

newdee commented Mar 1, 2023

结构体中包含枚举类型也不行吗?我有一个同样的结构体,里面加了一个enum类型,然后就报这个错了,不加的时候是对的。

@qicosmos
Copy link
Owner

qicosmos commented Mar 1, 2023

什么错误?

@newdee
Copy link

newdee commented Mar 1, 2023

什么错误?
创建表的时候
大概和这个issue下的类似, error: no matching function for call to 'type_to_name(ormpp::identity<Title>)'
然后发现好像是不支持枚举类型的,估计得手动把枚举转int,另外timestamp转bigint不太好吧,但是问题也不大,string转text,array转varchar,这两个是不是真的不太好~~~
对了,因为C++的orm很少,你写的这个我觉得很棒,而且是MIT的,但是维护开源项目不易,我只是说一下用户习惯哈,希望别生气

@qicosmos
Copy link
Owner

qicosmos commented Mar 1, 2023

哈哈,你的建议很好,其实这些都可以支持,只不过目前主要精力在雅兰亭库和cinatra c++20 协程重构上,等这两个差不多了就可以再来重构优化ormpp了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants