0

ドキュメントとドキュメントの表紙画像の両方のファイルをアップロードして DB に保存したいと考えています。ただし、ファイル列しかありません。2枚目の画像は入っていません。

これは私のエンティティクラスがどのように見えるかです:

class Document
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;
    /**
    * @var string
    *
    * @ORM\Column(name="document_title", type="string", length=255)
    */
    private $documentTitle;

    /**
     * @ORM\Column(type="string", length=255)
     * @var string
     */
    private $fileName;
    /**
     *@Vich\UploadableField(mapping="user_documents", fileNameProperty="fileName")
     * @var File
     */
    private $documentFile;
    /*
    * @ORM\Column(type="string", length=255)
    * @var string
    */
    private $coverName;
    /**
     *@Vich\UploadableField(mapping="documents_covers", fileNameProperty="coverName")
     * @var File
     */
    private $documentCover;

    /**
     * @ORM\ManyToOne(targetEntity="Foo\UserBundle\Entity\User", inversedBy="documents")
     **/
    private $owner;
}

ここで、私のセッターは次のようになります。

public function setDocumentFile(File $documentFile = null)
{
    $this->documentFile = $documentFile;
    if ($documentFile){
        $this->updatedAt = new \DateTime('now');
    }
    return $this;
}

/**
 * @param File $documentCover
 */
public function setDocumentCover(File $documentCover = null)
{
    $this->documentCover = $documentCover;
}

そして、私の vich アップローダの設定:

vich_uploader:
    db_driver: orm
    storage: file_system
    mappings:
        documents_covers:
            uri_prefix: %app.path.documents_covers%
            upload_destination: %kernel.root_dir%/../web/uploads/images/documents
            namer: vich_uploader.namer_uniqid
        user_documents:
            uri_prefix: %app.path.user_documents%
            upload_destination: %kernel.root_dir%/../web/uploads/files/user/documents
            namer: vich_uploader.namer_uniqid

そこのディレクトリを調べるとそこにファイルが存在しますが、DB を調べると $documentFile しかありません。 文書表データ

4

2 に答える 2

0

データベース スキーマを更新する必要があるようです。次のコマンドを使用できます。

php app/console doctrine:schema:update --force

しかし、実稼働環境がある場合、これはデータベース スキーマを更新する良い方法ではありません。この場合、migrationを作成する必要があります。

また、エンティティ内の 1 つのフィールド (documentCover) のみを更新する場合にファイル保存エラーを回避するために、次の方法で setDocumentCover セッターを実装することをお勧めします。

public function setDocumentCover(File $documentCover = null)
{
    $this->documentCover = $documentCover;
    if ($documentCover){
        $this->updatedAt = new \DateTime('now');
    }
    return $this;
}
于 2016-01-27T16:44:57.517 に答える
0

$coverNameフィールドが正しく定義されていないようです。次のようになります (docblock の宣言方法に注意してください)。

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
private $coverName;
于 2016-01-27T20:25:24.090 に答える