我有一个看起来像这样的模型:
class Pdf extends \lithium\data\Model
{
protected $_meta = array('source' => 'fs.files');
protected $_schema = array('_id'=>array('type'=>'id'));
public $file;
/**
* @param $zipfile string The full name and path of a zip file
* @param $filename string
*/
public static function loadFromFile($zipfile, $filename){
$name = 'zip://'.$zipfile.'#'.$filename;
$pdf = Pdf::create();
$pdf->file = file_get_contents($name);
$pdf->filename = $filename;
$pdf->metadata = ["filename" => $filename, "zipfile" => $zipfile];
return $pdf;
}
}
静态函数获取 zip 存档的全名和存档中文件的名称,创建模型,从存档文件加载内容,设置一些元数据,然后返回模型。这在我正在编写的控制台命令中使用,它将遍历一个 zip 文件列表,每个文件都包含一堆 pdf,并将 pdf 添加到数据库中。
当我保存模型时,pdf 确实会添加到数据库中。我可以从 MongoDB 控制台查看所有 pdf,即使用db.fs.files.find()
. 我还可以使用 mongofiles 命令从数据库中获取 pdf。
但是,如果不是将 pdf 存储在 fs.files 下,而是将它们存储在 fs.files.pdfs 下,那就太好了。这是因为我计划将 jpeg 和文本文档也存储在同一个数据库中。
如果我将类中的 $_meta 更改为array('source' => 'fs.files.pdfs')
,我的控制台命令似乎会将 pdf 文档输出到终端而不是添加它(顺便说一下,我想知道 Lithium 这样做的原因!)
我已经检查了文档,但无法弄清楚我做错了什么。有什么方法可以让 Lithium 根据使用的模型将我的文件存储在单独的集合中?
(如果我的术语不准确,我深表歉意;这是我第一次尝试在基础教程之外使用 Lithium 和 MongoDB。)