web-dev-qa-db-ja.com

Symfonyでのエンティティゲッターとセッターの生成/ Doctrine ORM

次のORM Symfonyエンティティにプロパティのみがあります:

<?php

namespace Evr\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="ev_article")
 * @ORM\Entity
 */
class Article
{
    /**
     *
     * @ORM\Column(name="article_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
     * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
     */
    private $subcategory;


    /**
     * 
     * @ORM\Column(type="string",length=512)
     */
    private $title;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $content;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $exclusive_content;

    /**
     * 
     * @ORM\Column(type="date")
     */
    private $creation_date;


     /**
     * 
     * @ORM\Column(type="integer")
     */
    private $views;

    /**
     * 
     * @ORM\Column(type="integer")
     */
    private $votes;


}

セッターとゲッターを自動的に生成したいので、次のコマンドを実行します。

app/console doctrine:generate:entities Evr/HomeBundle/Entity/Article

そして、私がこれを行うたびに、次のエラーメッセージが表示されます:

  [Doctrine\ORM\Mapping\MappingException]
  Class "Evr\HomeBundle\Entity\Article" is not a valid entity or mapped super
   class.



doctrine:generate:entities [--path="..."] [--no-backup] name

なぜエンティティを生成しないのか分かりませんが、エンティティ/アノテーションに何か問題がありますか?

23
SmootQ

このエンティティを削除して、次のコマンドで再生成してみてください。

php app/console doctrine:generate:entity --entity="EvrHomeBundle:Article" --fields="name:string(255) content:text exclusive_content:text creation_date:date views:integer votes:integer"

そして、手動で追加します。

/**
 * 
 * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
 * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
 */
private $subcategory;
11

試してください:

app/console doctrine:generate:entities EvrHomeBundle:Article

Symfony 3.0以降を使用している場合、binでアプリを置き換えます:

bin/console doctrine:generate:entities EvrHomeBundle:Article

Symfony 4+を使用している場合:

bin/console make:entity --regenerate 
41
zizoujab
php bin/console doctrine:generate:entities AppBundle

これにより、必要なすべてのgetterおよびsetterが自動的にエンティティファイルに生成されます。

テーブルについて特定したい場合は、これを使用します。

php bin/console doctrine:generate:entities AppBundle:"TABLE_NAME"

"TABLE_NAME"をテーブルの名前に置き換えます。

10
jcoder

マッピングのインポート(データベースから)

_> php bin/console doctrine:mapping:import 'AppBundle\Entity' yml --path=src/AppBundle/Resources/config/doctrine

マッピングからエンティティを生成しますが、ゲッターとセッターは使用しません

_> php bin/console doctrine:mapping:convert annotation ./src 

OR

ゲッターとセッターを使用したマッピングからエンティティを生成

_> php bin/console doctrine:generate:entities AppBundle/Entity
3
Oleksandr P.

ORMにも注意してください。ゲッター/セッターを生成するためにカウントされます。

/**
 * @var date
 *
 * @ORM\Column(name="creation_date", type="date")

 */
3
aurny2420289

欠けている*は解決策の1つであると考えた

しかし、私の場合、コマンドプロンプトからエンティティを作成する際に、注釈ではなくYMLの構成形式を選択しました。

今私がやっていることは、注釈を使用してマッピングコマンドを与えているので、機能していません。

Resources/config/Category.orm.ymlを次のように設定してみてください:

AppBundle\Entity\Category:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\CategoryRepository
    oneToMany:
        products:
            targetEntity: Product
            mappedBy: Category

そして、Resources/config/Product.orm.ymlを次のように変更します。

AppBundle\Entity\Product:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\ProductRepository
    manyToOne:
        category:
            targetEntity: Category
            inversedBy: products
            joinColumn:
                name: category_id
                referenceColumnName: id

そして、私はそれがバグではなく、より良い理解だと感じています!

2

使用法:

orm:generate-entities dest-path

コンソールの例:

doctrine orm:generate-entities --generate-annotations="true" destination_path

ソース: http://wildlyinaccurate.com/useful-doctrine-2-console-commands/