0

次のようなモデルがあります。

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 アーカイブの完全な名前とアーカイブ内のファイルの名前を取得し、モデルを作成し、アーカイブされたファイルからコンテンツを読み込み、いくつかのメタデータを設定し、モデルを返します。これは、私が書いているコンソール コマンドで使用されます。このコマンドは、それぞれが多数の pdf を含む zip ファイルのリストを反復処理し、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 を使用する最初の試みです。)

4

2 に答える 2

2

ただし、pdf を fs.files の下に保存するのではなく、fs.files.pdfs の下に保存できると本当に便利です。これは、同じデータベースに jpeg とテキスト ドキュメントも保存することを計画しているためです。

現時点では、ソースfs.files.pdfsに名前を付けることはできませんがpdfs.filesphotos.files...

ドキュメントを確認しましたが、何が間違っているのかわかりません。使用しているモデルに応じて、Lithium でファイルを別のコレクションに保存する方法はありますか?

ここで強調表示されている行を見てください: https://github.com/UnionOfRAD/lithium/blob/master/data/source/MongoDb.php#L387-390

リチウムがそれを処理する方法は次のとおりです

于 2012-09-17T08:11:03.867 に答える
0

ええ、私はこれについて IRC で話し合ったと思います。これは MongoDB の制限であり、複数の GridFS プレフィックスを使用できるとは思えません (間違っている場合は誰かが訂正してください)。

さまざまなモデルを介してさまざまなファイル タイプを操作する方法を探しているだけの場合は、個別のモデルを作成してから、デフォルトのクエリを変更して条件に含める'type' => 'pdf'か、それに沿ったものにすることをお勧めします。

于 2012-09-28T19:23:14.077 に答える