[英]Symfony 5 - Doctrine with schema_filter not working
當我在我的項目中執行命令行doctrine:schema:update --force
時,我試圖忽略兩個實體,他們是這樣寫的:
/**
* @ORM\Entity(readOnly=true)
* @ORM\Table(name="view_tableau_de_bord")
*/
class ViewTableauDeBord
{
//...
}
在我的 doctrine.yaml 配置文件中:
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_pgsql'
server_version: '12'
charset: utf8
schema_filter: ~^(?!view_)~
# ...
當我的視圖在schema_filter
中時,Doctrine 不斷生成所有實體。 你對此有解釋嗎? 這是我第一次在項目中使用此選項。
項目配置:
更新正確解釋的答案。
schema_filter
不是用來“過濾”實體的,而是用來從 doctrine 意識中過濾 db 表的。
這是一個例子:
假設您手動創建一個表,該表從名為view_booking_by_customer_per_year
的自定義原始 php cronjob 更新,您的項目中的代碼不使用該表,但用於數據分析。
這是一個典型示例,您不希望 doctrine 每次要更新架構時都生成這樣的查詢。
DROP TABLE view_booking_by_customer_per_year; // NO I DONT WANT THIS
所以使用schema_filter
你可以告訴 doctrine 在他的驗證和更新過程中忽略這個表。
嘗試使用原始 sql 創建隨機表並使用doctrine:schema:validate
。 它將顯示database is not in sync
錯誤。 一旦你把它放在 schema_filter 中,錯誤就不會再發生了。
它適用於doctrine:migration:diff
和doctrine:schema:update
但是如果你想避免在數據庫內部生成一個實體,那么可以從 Ernesto 的答案中的鏈接中找到這個:
schema_ignore_classes:
- Reference\To\My\Class
- Reference\To\My\OtherClass
只能從 Doctrine 2.7 版本開始工作。 您可以在此處找到完整的示例: 運行架構管理器更新時忽略 Doctrine2 實體
我強烈建議您使用doctrine:migration:diff
然后使用doctrine:migration:migrate
而不是doctrine:schema:update
來對數據庫執行更改。 這對本地開發人員來說沒問題,但在生產中這是一個非常糟糕的做法。
https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html
並且; 抱歉我之前回答的很短哈哈:)
標有readOnly=true
標志的實體不再被更新跟蹤,但仍然可以插入或刪除行,如文檔中所述。
doctrine:schema:update
命令仍會考慮表以更新模式。
在“運行架構管理器更新時忽略 Doctrine2 實體”問題的答案中,有 3 個有效選項可以忽略架構更新中的實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.