यह सिद्धांत द्वारा कार्यान्वित नहीं कर रहा है बस, क्योंकि यह बहुत मंच-निर्भर करता है।
आपको केवल अपनी आवश्यकता है, स्वयं को QuoteStrategy लागू करें।
उदाहरण के लिए, सिम्फोनी परियोजना के लिए:
कॉपी-पेस्ट विक्रेता AnsiQuoteStrategy
वर्ग, इसका नाम बदलना और कुछ के हवाले कर:
AppBundle/ORM/QuoteStrategy.php
namespace AppBundle\ORM;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\ORM\Mapping as M;
class QuoteStrategy implements M\QuoteStrategy
{
private function quote($token, AbstractPlatform $platform)
{
// implement your quote strategy
switch ($platform->getName()) {
case 'mysql':
default:
return '`' . $token . '`';
}
}
// add quoting to appropriate methods
public function getColumnName($fieldName, M\ClassMetadata $class, AbstractPlatform $platform)
{
return $this->quote($class->fieldMappings[$fieldName]['columnName'], $platform);
}
// ... Rest methods
}
फिर, अपनी बोली रणनीति को सेवा के रूप में पंजीकृत करें:
एप्लिकेशन/config/config.yml
orm:
entity_managers:
default:
quote_strategy: app.orm.quote_strategy
: 10
src/AppBundle/संसाधन/config/services.yml
app.orm.quote_strategy:
class: AppBundle\ORM\QuoteStrategy
public: false
फिर, अपने entitymanager विन्यास के लिए इसका इस्तेमाल करते हैं यह सब है :)
स्रोत
2017-10-31 13:05:51
मुझे अभी पता चला है कि सिद्धांत डीबीएएल अब क्ली टूल \ Doctrine \ DBAL \ Tools \ Console \ Comma के साथ भेज दिया गया है nd \ ReservedWordsCommand() जो किसी भी समस्या के कारण आपकी संस्थाओं को स्कैन करने के लिए वास्तव में उपयोगी है। इसका परीक्षण करने के लिए "सिद्धांत डबल: आरक्षित शब्द" चलाने का प्रयास करें। –
+1 अजीब लगता है कि तालिका बनाना ठीक काम करता है। –
आईएमएचओ सिद्धांत यहां टूटा हुआ है। कहीं और जहां सिस्टम आपके लिए चीजें नहीं बचता है इसे एसक्यूएल इंजेक्शन भेद्यता कहा जाएगा। – rjmunro