标签: datamapper

如何在Data Mapper中加载一对多关系?

虽然我将以1:1的关系选择Ghost模式,但我不确定这是否足以构成1:n的关系.

例如,当我加载一个可能有一百个Item对象的Order对象时,我首先会给items属性赋值NULL.

问题是:

A)我应该分配NULL然后,在第一次访问items属性时查找该项的所有订单并加载所有这些订单?

B)或者我应该只加载一个只包含所有order_id的轻量级记录集,并加载100个Item Ghost对象,这些对象只设置了order_id,但其他一切都是NULL - 一旦访问了Item对象以从中获取更多细节,懒加载那个特定的Item对象数据?

database orm database-design datamapper

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

DataMapper:创建新记录或更新现有记录

DataMapper是否提供了一种在不存在或更新现有记录时创建新记录的便捷方法?我在API文档中找不到任何内容.

这就是我目前看来并不优雅的东西:

foo = Foo.get(id)
if foo.nil?
  foo = Foo.create(#attributes...)
else
  foo.update(#attributes...)
end
foo.save
Run Code Online (Sandbox Code Playgroud)

ruby datamapper

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

Rails 3:传统MySQL数据库的ActiveRecord与DataMapper(vs. ???)

对于传统的MySQL 5.1数据库,哪个ORM最适合使用新的Rails 3应用程序?我不希望对这个数据库进行迁移(尽管模式可能会不时发生变化),但我一定会写信给它.

mysql activerecord ruby-on-rails datamapper

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

在Windows上安装dm-types.(Win7 x64)

我正在尝试在我的机器上安装DataMapper的dm-types

gem install dm-types 
Run Code Online (Sandbox Code Playgroud)

我从RubyInstaller(1.9.3)安装了Ruby,我也安装了DevKit.(以及其他一些宝石,如sinatra,haml,dm-core和bcrypt-ruby).
但是,当我运行"gem install dm-types"时,会发生这种情况.

C:\Users\Lev>gem install dm-types
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing dm-types:
        ERROR: Failed to build gem native extension.

        "C:/Program Files (x86)/Ruby/Ruby193/bin/ruby.exe" extconf.rb
creating Makefile

make
Makefile:172: warning: overriding commands for target `C:/Program'
Makefile:163: warning: ignoring old commands for target `C:/Program'
Makefile:172: warning: overriding commands for target `Files'
Makefile:163: warning: ignoring old commands for target `Files'
Makefile:215: *** multiple target patterns.  Stop.


Gem …
Run Code Online (Sandbox Code Playgroud)

ruby windows rubygems datamapper

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

Sinatra + Heroku + Datamapper使用dm-sqlite-adapter部署问题

由于某种原因,heroku试图要求dm-sqlite-adapter,即使它应该在这里使用Postgres.请注意,当我打开任何URL时会发生这种情况 - 而不是在git push本身.

我建立了默认的Facebook应用程序.

Gemfile:

source :gemcutter

gem "foreman"

gem "sinatra"
gem "mogli"
gem "json"
gem "httparty"
gem "thin"
gem "data_mapper"
gem "heroku"

group :production do
    gem "pg"
    gem "dm-postgres-adapter"
end

group :development, :test do
    gem "sqlite3"
    gem "dm-sqlite-adapter"
end
Run Code Online (Sandbox Code Playgroud)

数据映射器设置:

# Setting up the database
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db")
Run Code Online (Sandbox Code Playgroud)

打开任何URL时的相关日志片段:

Starting process with command `bundle exec thin -R config.ru start -p 34984`
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError)
2012-01-18T15:11:55+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in …
Run Code Online (Sandbox Code Playgroud)

ruby datamapper heroku sinatra

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

如何让datamapper与postgresql数据库一起使用?

我找到了几个使用datamapper的例子,并且能够让它们运行起来.所有这些示例都是针对sqlite数据库的.我正在尝试将datamapper与postgresql一起使用.

我将datamapper中的调用从sqlite3更改为postgres,我已经安装了dm-postgres-adapter.但它仍然无效.

还有什么我需要做的?

ruby database postgresql ruby-on-rails datamapper

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

键必须是字符串或符号

建立:

Ruby on rails 3.2.2
Ruby 1.9.2
dataMapper 1.2.0
mongoid 2.4.8
mongoid_orderable 1.0.0
Run Code Online (Sandbox Code Playgroud)

获得keys must be strings or symbols使用mongoid_orderable时错误.

我认为这与我使用的dataMapper有关,除了mongid(使用dataMapper从其他服务器移植数据)

我注意到dataMapper和mongoid之间的冲突,因为它们都使用各种方法扩展Symbol,asc,desc等.这可能是同样的问题吗?

如果有任何帮助,这是我的stacktrace的片段:

keys must be strings or symbols
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:436:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:25:in `block in update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/retry.rb:29:in `retry_on_connection_failure'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:24:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collection.rb:149:in `update'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/contexts/mongo.rb:6:in `inc'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/criteria.rb:1:in `inc'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:125:in `apply_position'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:85:in `add_to_list'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:419:in `block in _run__3008157942946527494__save__4591629889417243504__callbacks'
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:215:in `block in _conditional_callback_around_742'
Run Code Online (Sandbox Code Playgroud)

mongoid_orderable的当前实现如下:

class MyModel
  include Mongoid::Document
  include Mongoid::Orderable
  default_scope order_by(:position => :asc)
end
Run Code Online (Sandbox Code Playgroud)

我很确定它与基于stacktrace的_mongoid_orderable_有关,并且如果我注释掉_mongoid_orderable_相关的行,它就可以工作.此处也提出了一个问题

ruby-on-rails datamapper mongoid

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

如何为不同的数据源实现Data Mapper/Repository持久性模式?

我正在从头开始编写一个新的网站项目.该项目在C#中,但我的背景是在PHP中(下面的伪代码有点混合,试图简洁和声明).

问题

我需要从两个地方之一检索配置数据 - 有时从本地数据库,有时从Soap服务.我应该能够从任一源创建同一组Model对象.

数据存储在不同数据源中完全不同的结构中 - 需要从Soap端拼凑出几个不同的Soap响应,而DB结构更接近于我在代码中构建模型对象的方式.

配置由对象树组成:产品包含属性,其中包含选项,这些选项具有应用时间的条件.

目标

我想尽可能地分开关注点(希望能够促进测试/维护/扩展能力):

  • 我的Model对象应该对Data Persistence或检索一无所知
  • 数据持久性对象应尽可能与数据源的确切类型无关
  • 我想尽可能地分开对象创建.

问题

我知道各种各样的设计模式(虽然我不完全确定我完全理解它们).我向程序员提出了一个与此类似的问题,得到了关于Persistence Ignorance(更多信息)和Repository模式的回复,它们似乎都是来自Microsoft世界的概念.

据我所知,"Persistence Ignorance"只是让Model对象对你的数据存储机制一无所知的概念,而Repository模式看起来与Data Mapper模式非常相似,只不过它可能更像是一个外观,隐藏更多实际发生的事情.

所以我的问题是:

在Data Mapper模式中,每个Model对象应该有一个Mapper吗?而不是一个整个配置树?

因此,我应该有一个使用所有Mapper对象的配置树构建对象吗?

class ConfigBuilder() {
    public ConfigBuilder (productMapper, propertyMapper, optionMapper, conditionMapper) {
        // save them into local properties
    }

    public Products() {
       var products = productMapper.FetchAll();

       foreach (var product in products) {
           AddProperties(product);
       }

        return …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller design-patterns data-access-layer datamapper

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

COdeigniter Datamapper ORM php 7静态问题

当我将我的服务器升级到php7 codeigniter,特别是datamapper ORM给我这个错误...

消息:访问静态属性DataMapper :: $ config为非静态
文件名:libraries/datamapper.php行号:6474

有问题的功能是......

protected function _dmz_assign_libraries()
{
    static $CI;
    if ($CI || $CI =& get_instance())
    {
        // make sure these exists to not trip __get()
        $this->load = NULL;
        $this->config = NULL;
        $this->lang = NULL;
        // access to the loader
        $this->load =& $CI->load;
        // to the config
        $this->config =& $CI->config;
        // and the language class
        $this->lang =& $CI->lang;
    }
}
Run Code Online (Sandbox Code Playgroud)

orm codeigniter datamapper

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

批量使用Pagerfanta / non ArrayAccess列表

我正在使用此处提供的解决方案 CRUD列表中添加用于批量操作的复选框。

但是,我的结果与Pagerfanta分页,因此看来我需要在表单中使用DataMapper。

我尝试了各种解决方案,但是无法在表单数据中获得所选字段:

class ModelEntitySelectionType extends AbstractType  implements DataMapperInterface
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('model_id', EntityType::class, [
            'required' => false,
            'class' => ModelFile::class,
            'choice_label' => 'id',
            'property_path' => '[id]', # in square brackets!
            'multiple' => true,
            'expanded' => true
        ])
            ->add('action', ChoiceType::class, [
                'choices' => [
                    'Delete' => 'delete'
                ]
            ])
            ->add('submit', SubmitType::class, [
                'label' => 'Process'
            ])

        ->setDataMapper($this)
        ;


    }

    public function setDefaultOptions(ExceptionInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => null,
            'csrf_protection' => false …
Run Code Online (Sandbox Code Playgroud)

forms datamapper symfony

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