次の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
なぜエンティティを生成しないのか分かりませんが、エンティティ/アノテーションに何か問題がありますか?
このエンティティを削除して、次のコマンドで再生成してみてください。
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;
試してください:
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
php bin/console doctrine:generate:entities AppBundle
これにより、必要なすべてのgetterおよびsetterが自動的にエンティティファイルに生成されます。
テーブルについて特定したい場合は、これを使用します。
php bin/console doctrine:generate:entities AppBundle:"TABLE_NAME"
"TABLE_NAME"をテーブルの名前に置き換えます。
マッピングのインポート(データベースから)
_> 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
ORMにも注意してください。ゲッター/セッターを生成するためにカウントされます。
/**
* @var date
*
* @ORM\Column(name="creation_date", type="date")
*/
欠けている*は解決策の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
そして、私はそれがバグではなく、より良い理解だと感じています!
使用法:
orm:generate-entities dest-path
コンソールの例:
doctrine orm:generate-entities --generate-annotations="true" destination_path
ソース: http://wildlyinaccurate.com/useful-doctrine-2-console-commands/