सिद्धांत के रूपांतरण और सत्यापन के साथ मुख्य मुद्दा यह है कि यह संपूर्ण डेटाबेस और सभी तालिकाओं को डिफ़ॉल्ट रूप से पढ़ता है, भले ही उनके लिए इकाइयां या मैपिंग मौजूद हों या नहीं। --filter=""
. का उपयोग करते समय भी orm:convert:mapping
calling को कॉल करते समय ध्वजांकित करें या orm:generate:entities
इस मुद्दे को हल करने के लिए और अपवादों को फेंकने वाले सिद्धांत को छोड़ने के लिए, आप सिद्धांत को केवल अपनी इच्छित तालिकाओं को पढ़ने के लिए सेट कर सकते हैं, उन्हें setFilterSchemaAssetsExpression
के साथ परिभाषित करके
$isDev = true;
$config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('/path/to/entities'), $isDev);
$config->setFilterSchemaAssetsExpression('/^(table1|table2|prefixed_.*|.*_suffixed)$/');
$em = \Doctrine\ORM\EntityManager::create(array(
'driver' => 'db_driver',
'host' => 'localhost',
'user' => 'user_name',
'password' => 'user_password',
'dbname' => 'database',
), $config);
या आप मौजूदा इकाई प्रबंधक के कनेक्शन के लिए फ़िल्टर सेट कर सकते हैं।
$em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/');
संदर्भ:http://doctrine-orm.readthedocs.org/en /नवीनतम/संदर्भ/कॉन्फ़िगरेशन.html
माना कि यह अपवादों को अनदेखा करने के सिद्धांत को बताने का एक तरीका नहीं है, लेकिन पूरे डेटाबेस के बजाय कुछ विशिष्ट तालिकाओं पर मौजूदा एप्लिकेशन पर सीखने के साथ आरंभ करने में आपकी सहायता करनी चाहिए।
एक साइड-नोट के रूप में आपने उल्लेख किया है कि आपके पास लिंक टेबल हैं। यदि आपके पास टेबल में विदेशी कुंजियां हैं जिन्हें आप फ़िल्टर में शामिल नहीं करते हैं, तो --from-डेटाबेस रूपांतरण अभी भी इसके लिए एक संदर्भ बनाएगा। आपको मैन्युअल रूप से बदलना होगा OneToMany, ManyToOne या ManyToMany की संबद्ध मैपिंग के बजाय इसके कच्चे रूप में मानचित्रण।
एनोटेशन मैपिंग doctrine orm:convert:mapping --from-database annotation /path/to/entities
से
/**
* @ORM\Entity
* @ORM\Table(name="order")
*/
class Order
{
/**
* @var \Customer
* @ORM\ManyToOne(targetEntity="Customer")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="customer", referencedColumnName="id", nullable=true)
* })
*/
private customer;
}
करने के लिए
/**
* @ORM\Entity
* @ORM\Table(name="order")
*/
class Order
{
/**
* @var integer
* @ORM\Column(name="customer", type="integer", nullable=true)
*/
private customer;
}
फिर doctrine orm:validate-schema
. का उपयोग करना न भूलें यह सुनिश्चित करने के लिए कि मैपिंग सिंक में हैं।