是否有使用$entityManager->find('entity', id)
時的方式與原則2自動報價保留字?自動報價保留字2
當使用查詢生成器可以做到這一點,但應該有一個全局配置設置,做到這一點?我不想在保留字的註釋中指定它。
是否有使用$entityManager->find('entity', id)
時的方式與原則2自動報價保留字?自動報價保留字2
當使用查詢生成器可以做到這一點,但應該有一個全局配置設置,做到這一點?我不想在保留字的註釋中指定它。
這是我養了一段時間後與學說團隊的問題。
您有@Column(NAME = 「`integer`」)
所以我想手動轉義字符:
https://github.com/doctrine/doctrine2/issues/2409
票證與評論關閉你需要在你的註釋
每通過@蒂姆 - 萊特爾所作的發言,以應付任何保留關鍵字,我已經重新提出了這個問題。這應該包含在Doctrine ORM的安全範圍內。
4.6。引用保留字
有時需要引用,因爲保留字衝突的列或表名。 學說不會自動引用標識符,因爲它會導致比解決問題更多的問題。引用表和列名需要使用定義中的記號明確完成。
<?php
/** @Column(name="`number`", type="integer") */
private $number;
學說將在所有SQL語句根據所使用的數據庫平臺,然後舉這個列名。
ID引用不起作用,除非您使用的是自定義的QuoteStrategy加入列名或鑑別列名。
爲了更好地控制列引用,在2.3中引入了Doctrine\ORM\Mapping\QuoteStrategy
接口。它針對每個列,表,別名和其他SQL名稱進行調用。你可以通過調用Doctrine\ORM\Configuration#setQuoteStrategy()
來實現QuoteStrategy。
添加了ANSI報價策略,該報價策略假設任何SQL名稱都不需要引用引用。你可以用下面的代碼使用它:
<?php
use Doctrine\ORM\Mapping\AnsiQuoteStrategy;
$configuration->setQuoteStrategy(new AnsiQuoteStrategy());
它不是教條執行,只是因爲它太依賴於平臺的。
所有你需要的,是實現自己的QuoteStrategy。
例如,對於symfony項目:
複製粘貼供應商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
}
然後,將您的報價策略註冊爲服務:
的src /的appbundle /資源/配置/ services.yml
app.orm.quote_strategy:
class: AppBundle\ORM\QuoteStrategy
public: false
然後,用它爲您的EntityManager配置:
應用程序/配置/ config.yml
orm:
entity_managers:
default:
quote_strategy: app.orm.quote_strategy
這是所有:)
我剛剛發現,該教條DBAL現在與cli工具\ Doctrine \ DBAL \ Tools \ Console \ Comma nd \ ReservedWordsCommand()這對於掃描實體可能會導致問題的任何事情非常有用。嘗試運行「doctrine dbal:保留字」來測試它。 –
+1似乎很奇怪,創建表的工作正常。 –
恕我直言主義在這裏被打破。任何其他地方,系統不會爲你逃脫,它將被稱爲SQL注入漏洞。 – rjmunro