2014-12-02 32 views
2

布爾這是我見過的最瘋狂的事情。 我的Symfony2和Doctrine已經瘋了TINYINT錯誤地轉換成空,而不是教義/ Symfony2的

我有MySQL數據庫與幾個不同的字段是TINYINT。 那些不是空的,所有的記錄都將這些值設置爲0或1.

所有的原理ORM映射ale設置正確(我將它重複檢查了一百次)。 所有干將設置是否正確(doublechecked爲好)。

但後來 - 爲一些對象不起作用......一些TINYINT的不正確翻譯爲布爾值,因爲它應該(和它的工作原理與其他物體並與enity等領域)。 ..而是它給NULL - 即使在數據庫中,此TINYINT設置爲「1」(或「0」 - 無關緊要)。

對於某些其它目的(同一實體的)能正常工作TINYINT =「1」被正確地識別爲真,「0」作爲假布爾值。

我的那些例子:

Events.orm.xml:

<entity name="Events" table="events"> 
    <change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy> 
    <field name="eventDeleted" type="boolean" column="_event_deleted"/> 

實體: 「Events.php」

映射:

/** 
* @var boolean $eventDeleted 
* 
* @ORM\Column(name="_event_deleted", type="boolean", nullable=false) 
*/ 
private $eventDeleted; 

和getter和setter :

/** 
* Set eventDeleted 
* 
* @param boolean $eventDeleted 
*/ 
public function setEventDeleted($eventDeleted) 
{ 
    $this->eventDeleted = $eventDeleted; 
} 

/** 
* Get eventDeleted 
* 
* @return boolean 
*/ 
public function getEventDeleted() 
{ 
    return $this->eventDeleted; 
} 

數據庫是:

database view

而且正如我所說的 - 某些對象它的工作原理,並給出 「1」 或 「0」 時,例如通過訪問:

{{ event[0].getEventDeleted }} 

和有時它會給出NULL。

我發現在教義JIRA提到的一些「相似」的問題,但沒有你猜怎麼解決了,什麼可能的原因:http://www.doctrine-project.org/jira/browse/DDC-1967

任何想法?

+0

你某處簽到(Symfony2的探查,手動轉儲)什麼數據進入實際查詢?如果你的堆棧發瘋了,你最好跟着兔子走,或許你甚至在Doctrine2中發現了一個bug? – 2014-12-02 22:37:39

+0

我檢查了轉儲。一切正常,正如我們從描述中所期望的那樣 - 在那些我提到的「null」被傳遞的情況下。但爲什麼? – konieckropka 2014-12-04 12:22:02

回答

1

嘗試使用查詢生成器創建查詢「手動」。
我也對symfony的2.1同樣的問題,而從會話變量取一個實體,一個布爾字段被返回null不管它有什麼價值。使用查詢生成器使它適用於我。

編輯
例子:

$qb = $em->createQueryBuilder(); 
$query = $qb->select('e.eventDeleted') 
    ->from('BundleName:Events', 'e') 
    ->where('e.id = :id') 
    ->setParameter('id', $id) 
    ->getQuery(); 
$eventDeleted = $query->getSingleResult(); 
+0

哦,感謝codeforlife,很高興聽到別人有同樣的問題。其實這個問題在2014年和更早的時候讓我感到困擾,項目目前被放棄了,但是,嘿,你分享你的想法真好!我真的很感激。你可以發佈一個用於處理QueryBuilder中的null問題的示例代碼嗎? :) 提前致謝。 – konieckropka 2016-02-29 13:51:43

+0

是的,當然。這將是這樣的:http://pastebin.com/YZCWqJVc – 2016-03-01 14:59:30