2012-05-10 10 views
5

पर डेटटाइम coloumn अद्यतन नहीं कर सकता है मैं apache सर्वर पर php 5.3 के साथ सिद्धांत 2.2 का उपयोग कर रहा हूं।सिद्धांत 2: SQL सर्वर 2008apm

अब तक मैं निम्नलिखित समस्या पर ठोकर खाई है: जब मैं एक datetime स्तंभ को अद्यतन करने की कोशिश मैं: SQLSTATE [22007]: [माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0] [एसक्यूएल सर्वर] रूपांतरण विफल रहे कनवर्टिंग दिनांक और/या चरित्र स्ट्रिंग से समय।

मैं कॉलम पर पहुंचने के लिए अब तक भी चला गया हूं और फिर उस तारीख का उपयोग केवल नई तारीख को सेट करने के लिए जोड़ा गया है ...... उसी परिणाम।

जब मैं डाटाबेस में और कॉलम से तारीख तक दोनों कॉलम को बदलता हूं, तो यह इरादे से कार्य करता है।

मेरी मुख्य समस्या यह है कि कुछ ऐसे क्षेत्र हैं जहां मुझे डेटाटाइम कॉलम का उपयोग करने की आवश्यकता होगी।

यहाँ मेरी कोड है:

(जन्मतिथि स्तंभ मैं तिथि बदल कर रहा था .... और कुछ स्तंभों जहां वह मेरे लिए संभव है में से एक है):

//This returns the datetime object that represents birthdate from the database 
$help=$object->getBirthDate(); 
$help->setTimestamp(mktime($time[0],$time[1],$time[2],$date[2],$date[1],$date[0])); 
$help->format(\DateTime::ISO8601); 
$object->setBirthDate($help); 

कोई जानता है यहाँ एक कामकाज?

यहां कोई भी सहायता की सराहना की जाती है।

उत्तर

0

datetime फ़ील्ड में आप कितने मूल्य दे रहे हैं? आप सिद्धांत 2.2 में एक Datetime उदाहरण

$entity->setDate(new \Datetime()); 
+0

हाँ मैं एक datetime उदाहरण गुजर रहा हूँ मेरे मामले में, मैं वर्तमान DateTimeType बढ़ाया। मैं जो करता हूं वह निम्नानुसार है (जन्मदिन वह कॉलम था जिसे मैंने आज तक बदल दिया ....और यह उन कुछ स्तंभों में से एक है जहां मेरे लिए यह संभव है): $ help = $ object-> getBirthDate(); // यह डाटाटाइम ऑब्जेक्ट देता है जो डाटाबेस $ help-> setTimestamp (mktime ($ time [0], $ time [1], $ time [2], $ date [2], $ date [ 1], $ तिथि [0])); $ सहायता-> प्रारूप (\ DateTime :: ISO8601); $ ऑब्जेक्ट-> सेट बिर्थडेट ($ सहायता); – Thomas

6

इसका एक अधिकारी बग पास करना चाहिए, 2.3 में हल करने की।

माइक्रोसॉन्ड को शून्य राशि के साथ स्ट्रिंग करने के लिए जाली जा रही है।

वर्कअराउंड: फ़ाइल /Doctrine/DBAL/Types/DateTimeType.php में समारोह बदलें convertToDatabaseValue:

public function convertToDatabaseValue($value, AbstractPlatform $platform) 
{ 
    if($value === null) 
     return null; 

    $value = $value->format($platform->getDateTimeFormatString()); 

    if(strlen($value) == 26 && 
     $platform->getDateTimeFormatString() == 'Y-m-d H:i:s.u' && 
     ($platform instanceof \Doctrine\DBAL\Platforms\SQLServer2008Platform 
      || 
     $platform instanceof \Doctrine\DBAL\Platforms\SQLServer2005Platform 
     )) 
     $value = substr($value, 0, \strlen($value)-3); 
    return $value; 
} 
+4

अब 3 साल बाद, डीबीएएल 2.5 पर है ... और अभी भी कोई फिक्स नहीं है :(SQL सर्वर का उपयोग करते समय मुझे डॉक्टर 1.x में इस तरह के कामकाज भी करना पड़ता है। हैलो? इस तरह की उच्च गुणवत्ता वाली libs कम नहीं होगी एंटरप्राइज़ में विश्वसनीयता जब तक कि इन चीजों को खत्म नहीं किया जाता है। रेंट के लिए खेद है, लेकिन मैं उन लोगों में से एक हूं जो ओएसएस के लिए बड़े पैमाने पर एम $ दुकान में धक्का देने की कोशिश करते हैं। इस तरह के मुद्दे मेरे मामले में मदद नहीं करते हैं। – DinoAmino

+0

मैं कैसे बदल सकता हूं फाइलें जो कंपोज़र के अंतर्गत हैं? मैं अपना खुद का प्रकार कैसे पंजीकृत कर सकता हूं? –

+0

धन्यवाद, इससे मुझे इस पुरानी परियोजनाओं में से एक में इस बग को ठीक करने में मदद मिली। –

3

मैं सिद्धांत 2.5 के साथ इस समस्या का सामना किया और SQL सर्वर 2012 समस्या यह है कि डेटाबेस है फ़ील्ड DATETIME टाइप है, लेकिन डिक्टिरिन केवल SQLServer2008Platform और ऊपर DATETIME2 का समर्थन करता है।

आपको अपनी विक्रेता निर्देशिका में फ़ाइलों को संपादित नहीं करना चाहिए। सही उत्तर कस्टम प्रकार बनाना है: Doctrine Custom Mapping Types

<?php 

namespace AppBundle\Doctrine\Type; 

use Doctrine\DBAL\Types\DateTimeType; 
use Doctrine\DBAL\Platforms\AbstractPlatform; 

class DateTime extends DateTimeType 
{ 
    private $dateTimeFormatString = 'Y-m-d H:i:s.000'; 

    public function convertToDatabaseValue($value, AbstractPlatform $platform) 
    { 
     return ($value !== null) 
      ? $value->format($this->dateTimeFormatString) : null; 
    } 

} 

और फिर Symfony config.yml में:

types: 
     datetime: AppBundle\Doctrine\Type\DateTime 
+0

के साथ कैसे ठीक करें इस वर्ग को सिम्फनी के बाहर लागू करने के लिए (अगर 'सिद्धांत-ओआरएम' का उपयोग कर सीधे) लागू करें, तो 'सिद्धांत का उपयोग करें \ DBAL \ प्रकार \ प्रकार; टाइप :: ओवरराइड टाइप (टाइप :: DATETIME,' YourNameSpace \ DateTimeTypeSqlServer2012 ');' आप में कहीं भी तारीखों के साथ किसी भी मानदंड का उपयोग करने से पहले आर कोड। मैंने इसे उस फ़ंक्शन में जोड़ा जो EntityManager क्लास उत्पन्न करता है, ताकि यह एक स्थायी फिक्स हो। – shadi