gpt4 book ai didi

php - 如何在模型中使用带有枚举集合列表和更改集合的 Lithium PHP 框架

转载 作者:可可西里 更新时间:2023-11-01 09:37:35 24 4
gpt4 key购买 nike

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

但是,(我知道它还没有完全发布),几乎没有任何信息、教程或示例可以让您从简单的博客教程中继续学习。

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

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

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

我认为有两件事我正在努力回答这两个问题 - 也许是对如何在 MVC 中将模型移动到简单的集合-模型- 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);
}
}

Controller :

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();
}
}

请注意, Controller 不支持选项或过滤器。

最佳答案

没有什么能阻止您拥有一个Collections 模型,您可以在其中设置$_meta['source'] = false 以防止 Lithium 在您的数据库中查找名为收藏。

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

您可以覆盖 Model::find() 方法以返回集合列表,而不是文档列表,或者将集合作为参数 Collections::find('all', array('conditions ' => ..., 'collection' => 'foo'))... 或者任何你想要的 :-)

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

关于php - 如何在模型中使用带有枚举集合列表和更改集合的 Lithium PHP 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com