编程语言
首页 > 编程语言> > 如何在集合枚举列表中使用Lithium PHP框架并在模型中更改集合

如何在集合枚举列表中使用Lithium PHP框架并在模型中更改集合

作者:互联网

我希望使用Lithium框架来构建我的应用程序配置接口,因为我喜欢它的最小方法和以文档存储(即Mongodb)为中心的模型.

但是,(而且我知道它还没有发布),那里几乎没有信息,教程或示例可让您从简单的博客教程中学习.

我现在想做的是构建一个应用程序,向我展示我在Mongodb中拥有的收藏,然后让我使用我选择的任何收藏.我似乎无法弄清楚:

a)我将如何建立一个枚举集合的模型-最好根据我的内部命名方案,

b)如何打破约定模型,以便可以指定要使用的集合的名称?

我认为我在努力解决这两个问题时遇到了两件事-可能是对如何将MVC中的模型移到简单的collection-model-controller-view实例之外的一个基本误解,其次,是告诉他们实际的过程. mongo数据源使用什么集合.

非常感谢收到的任何指针或示例.

克里斯

更新::

因此,我想出了如何设置集合-您可以在$_meta数组中设置源,以供参考:

protected $_meta = array(
    'source' => '<<collectionName>>'
);

仍然不知道如何使用模型来列出我在数据库中拥有的所有集合.有什么想法如何从哲学和技术的方式做到这一点?

进一步更新::

因此,我还要感谢以下评论.至少我现在也许可以重新表述一下这个问题了.我可以这样定义我的模型:

<?php
namespace app\models;
use lithium\data\Model;

class Posts extends \lithium\data\Model{

    protected $_meta = array('source' => false);

    public function testcolls(){
        return (self::connection()->sources());
    }
}
?>

那么我认为我可以使用:

<?php foreach ($post->testcolls() as $coll): ?>
    <h2><?=$coll ?></h2>
<?php endforeach; ?>

那行得通-但是,我真正想做的不是在模型中创建“ testcolls”方法,而是如Medhi在下面建议的那样,我需要覆盖find方法.我似乎无法弄清楚该如何做以及需要返回什么.该文档对此不太清楚.

最后更新

基于下面的评论和一些实验,我想到了以下内容,它们可以调用以集合为参数的find.

模型:

class Dataqueues extends \lithium\data\Model{

    protected $_meta = array('source' => false);

    public static function find($filter, array $options = array()) {
        if (isset($options['collection'])){
            self::meta('source', $options['collection']);
        }
        return parent::find('all',$options);
    }   
}

控制器:

class DataqueuesController extends \lithium\action\Controller {

    public function index() {
        $dataqueues = Dataqueues::find('all',array('limit'=>20,'collection'=>'W501'));
        return compact('dataqueues');
    }
}

最后,获得返回集合列表的模型也非常简单:

class Collections extends \lithium\data\Model{

    protected $_meta = array('source' => false);

    public static function find($filter, array $options = array()) {

        return self::connection()->sources();
    }   
}

请注意,控制器将不支持选项或过滤器.

解决方法:

没有什么可以阻止您使用Collections Model的,在其中设置$_meta [‘source’] = false可以防止Lithium在名为collections的数据库中查找Collection.

在此模型中,您可以调用YourModel :: connection()-> sources()列出所有Mongo集合.
用于source()的文档:http://li3.me/docs/lithium/data/source/MongoDb::sources().基本上,它在MongoDB实例http://php.net/manual/en/mongodb.listcollections.php上调用listCollections().

您可以重写Model :: find()方法以返回集合列表,而不是文档列表,或者将集合作为参数传递给Collections :: find(‘all’,array(‘conditions’=> .. .,’collection’=>’foo’))…或任何您想要的:-)

锂被设计成不会对您施加太大的压力!

标签:mongodb,lithium,php
来源: https://codeday.me/bug/20191201/2080740.html