2011-05-01 8 views
5

तो मैं पूरी सुबह सिम्फनी 2 के साथ झुका रहा हूं और मुख्य दस्तावेज या कम से कम आधा पढ़ता हूं। मैं डेटाबेस से संबंधित कुछ भी पर अटक गया हूँ।सिम्फनी 2 डीबीएएल और ओआरएम सेटअप

मेरा सरल सवाल यह है: क्या हम हाथ से पहले डेटाबेस संरचना बनाते हैं या नहीं?

प्रलेखन कहते हैं कि इकाई वर्ग बनाएं और फिर डेटाबेस का उपयोग कर डेटाबेस तालिका उत्पन्न करें: सीएलआई पर बनाएं। मैंने ओआरएम एनोटेशन के साथ एक ब्लॉग इकाई वर्ग का पालन किया और बनाया।

php app/console doctrine:database:create 

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Applications/MAMP/htdocs/flairbagSy2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 36 
Could not create database for connection named blog 
SQLSTATE[HY000] [2002] No such file or directory 

मैं इस mysql सॉकेट फ़ाइल का स्थान के साथ कुछ है लगता है, लेकिन मैं नहीं जानता कि Symfony2 के कॉन्फ़िगरेशन में सॉकेट फ़ाइल का रास्ता बदलने का तरीका:

आदेश भाग गया।

अगर कोई यह इंगित कर सकता है कि मैं सॉकेट फ़ाइल का पथ कहां बदलूं।

मैं एक बार CakePHP के साथ एक समान समस्या थी और उन्हें आसानी से ठीक db कनेक्शन सरणी के लिए एक बंदरगाह कुंजी जोड़ने के लिए किया गया था:

var $default = array(
    'driver' => 'mysql', 
    'persistent' => false, 
    'host' => 'localhost', 
    'login' => 'root', 
    'password' => 'root', 
    'database' => 'cake', 
    'port' => '/Applications/MAMP/tmp/mysql/mysql.sock', 
); 

मैं Symfony2 में ऐसा कैसे करते हैं।

+3

अपने डेटाबेस कनेक्शन सेटिंग्स में 'unix_socket' पैरामीटर का उपयोग करें – meze

उत्तर

7

सिद्धांत: डेटाबेस: कमांड टेबल की संरचना को पॉप्युलेट नहीं करेगा बल्कि आपके डेटाबेस मैनेजर जैसे MySQL पर डेटाबेस बनाएगा। डेटाबेस संरचना को पॉप्युलेट करने के लिए, संरचना के शुरुआती निर्माण के लिए doctrine:schema:create कमांड और doctrine:schema:update --force कमांड का उपयोग करें जब आप एनोटेशन में कुछ संशोधन करने के बाद संरचना को अपडेट करना चाहते हैं।

जैसा कि आपने उल्लेख किया है, आपको सिद्धांत के लिए सही तरीके से काम करने के लिए सिम्फनी 2 में कुछ पैरामीटर कॉन्फ़िगर करने की आवश्यकता है। उन पैरामीटर को config.yml कॉन्फ़िगरेशन फ़ाइल में सेट करने की आवश्यकता है जिसे आप मानक Symfony2 वितरण के ऐप/कॉन्फ़िगर फ़ोल्डर में पा सकते हैं।

# Doctrine Services Configuration 
doctrine: 
    dbal: 
    default_connection: default 
    connections: 
     default: 
     driver: pdo_mysql 
     host:  localhost 
     port:  3396 
     dbname: dbname_dev 
     user:  dbname_dev 
     password: yourpassword 
     logging: "%kernel.debug%" 

    orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    default_entity_manager: default 
    entity_managers: 
     default: 
     mappings: 
      AcmeBundle: ~ 

विन्यास, dbal भाग के पहले भाग, प्रयोग किया जाता है कॉन्फ़िगर अपने डेटाबेस कनेक्शन जानकारी: यहाँ विन्यास आप config.yml फाइल करने के लिए जोड़ने की जरूरत का एक नमूना है। मैं आपको पहले अपने डेटाबेस के रूट खाते से कनेक्शन का परीक्षण करने का सुझाव दूंगा और फिर जब सब कुछ ठीक से काम कर रहा है, तो समर्पित उपयोगकर्ता का उपयोग करने के लिए सेटिंग्स को बदलें। इस तरह, आप सुनिश्चित हैं कि आपके पास कुछ विशेषाधिकार समस्याएं या अन्य प्रकार की समस्याएं नहीं हैं जो समर्पित उपयोगकर्ता से संबंधित हो सकती हैं।

दूसरा भाग, ओआरएम भाग, डेटाबेस में आपकी इकाइयों के मैपिंग को कॉन्फ़िगर करने के लिए उपयोग किया जाता है। यदि आप Symfony2 को स्वचालित रूप से डेटाबेस संरचना को पॉप्युलेट करना चाहते हैं तो यह भाग आवश्यक है। अपनी परियोजना में ओआरएम कार्यक्षमताओं को सक्षम करने के लिए उपरोक्त नमूने में अपने बंडल के नाम से AcmeBundle को बदलें।

एक तरफ ध्यान दें, सिम्फनी 2 टीम कॉन्फ़िगरेशन को सरल बनाने पर काम कर रही है और मुझे लगता है कि सिद्धांत पैरामीटर को कॉन्फ़िगर करने का अब एक आसान तरीका है। मैं जिस नमूना का प्रस्ताव करता हूं वह वह है जिसे मैं अभी सिम्फनी 2 के बीटा 1 के साथ उपयोग कर रहा हूं।

और अंत में आपके प्रश्न का उत्तर देने के लिए, मुझे लगता है कि सिम्फनी 2 को सृजन के साथ सौदा करने और डेटाबेस संरचना को अद्यतन करने का सबसे अच्छा तरीका है। इसके पक्ष में एक तर्क यह होगा कि आपको डेटाबेस संरचना से निपटने वाली SQL फ़ाइल को बनाए रखने की आवश्यकता नहीं है। यह जानकारी आपकी इकाई में एनोटेशन द्वारा निहित है, इसलिए आपको केवल एनोटेशन बदलना होगा और संरचना को अपडेट करने के लिए doctrine:schema:update --force कमांड को कॉल करना होगा।इसे ध्यान में रखते हुए, आपको हाथ से पहले संरचना नहीं बनाना चाहिए, लेकिन सिम्फनी 2 इसे आपके लिए बना दें।

यहाँ कार्यप्रवाह है कि सब कुछ देखने का तरीका यह काम कर रहा है:

  1. अद्यतन अपने config.yml (एप्लिकेशन/config में) सिद्धांत कॉन्फ़िगरेशन पैरामीटर
  2. ओपन के लिए एक संकेत शामिल हैं और के रूट फ़ोल्डर में जाने के लिए Symfony वितरण (जहां आप ऐप्स, src, विक्रेता और वेब फ़ोल्डर्स देखें)
  3. भागो डेटाबेस संरचना बनाने के लिए भागो php app/console doctrine:schema:create MySQL
  4. में डेटाबेस बनाने के लिए
  5. MySQL में जांचें कि डेटाबेस और संरचना सही ढंग से बनाई गई है

इस सहायता की आशा करें।

सादर,
मैट

+0

मैं स्कीमा को परिभाषित करूंगा ?? जैसे हम schema.yml में Symfony1 में करने के लिए उपयोग करते हैं।मैं पूरी तरह से उलझन में हूँ कृपया मदद करें। –

+0

सबसे पहले, मैंने सिम्फनी 1 के साथ कभी काम नहीं किया, लेकिन जो मैं समझता हूं, सिम्फनी 2 में कोई भी 'schema.yml' नहीं है। प्रत्येक इकाई के पास अपनी स्कीमा फ़ाइल होनी चाहिए और आपको उन्हें इस तरह की फाइल में रखना होगा: '@ AcmeBundle/Resources/config/doctrine/EntityClassName.orm.yml'। आधिकारिक Symfony2 पुस्तक में 'डेटाबेस और सिद्धांत' पर [दस्तावेज़ीकरण] (http://symfony.com/doc/current/book/doctrine.html#add-mapping-information) पढ़ें और इसके बजाय 'YAML' टैब पर स्विच करें डिफ़ॉल्ट एक 'एनोटेशन'। – Matt

+0

धन्यवाद @ मैट। क्योंकि मैं सिम्फनी 1 से आ रहा था, मैं उलझन में आया। –

2

MAMP का उपयोग कर आप फ़ाइल

पहले जांच कर लें /Applications/MAMP/tmp/mysql/mysql.sock करने के लिए अपने/var/mysql/फ़ोल्डर में एक प्रतीकात्मक कड़ी बना सकते हैं देखने के लिए अपने/var/mysql फ़ोल्डर मौजूद है, तो अगर यह इसे का उपयोग नहीं करता है सुनिश्चित करें:

mkdir /var/mysql 

जाओ ऊपर फ़ोल्डर में तो अपने प्रतीकात्मक कड़ी बनाने के लिए निम्नलिखित लिखने

0,123,
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock 

आपके पास टाइमज़ोन समस्याएं हो सकती हैं (उपर्युक्त समस्या से संबंधित नहीं, लेकिन यदि आप एक मंप उपयोगकर्ता हैं तो आपके पास शायद यह भी होगा) जिसे आप निम्नलिखित/अपने/निजी/php.ini फ़ाइल (ध्यान दें: इस अपने php.ini अपने MAMP फ़ोल्डर में मिलता फ़ाइल नहीं है)

date.timezone = "America/Montreal" 

नोट: आप अपने वास्तविक समय क्षेत्र जो मेरा रूप में एक ही नहीं हो सकता है को बदलने की जरूरत हो सकती है।

संदर्भ: http://www.iamseree.com/application-development/doctrine-error-on-mac-osx-it-is-not-safe-to-rely-on-the-systems-timezone-settings-you-are-required-to-use-the-date-timezone-setting-or-the-date_default_timezone_set-function

http://mikecroteau.wordpress.com/2011/08/07/symfony2-could-not-create-database-for-connection-named-sqlstatehy000-2002-no-such-file-or-directory/

+0

एमएएमपी 2.0.5 + सिम्फनी 2.0.16 के रूप में यह ln कमांड एकमात्र उत्तर है जो पुस्तक अध्याय "डेटाबेस और सिद्धांत" में कोड प्राप्त करता है! धन्यवाद। –

+0

मुझे शेर और एसएफ 2.1 के साथ काम करने के लिए कुछ भी नहीं मिल सकता है। मुझे फर्श लगाया गया है कि 2012 में जिन उपकरणों के साथ हम अभी भी काम कर रहे हैं वे बहुत भयानक हैं। मैं 1 99 8 से एक देव रहा हूं और चीजें बदतर लग रही हैं। – Acyra

5

मूल सवाल यह है कि Symfony2 विन्यास में एक गैर मानक सॉकेट को परिभाषित करने के बारे में पूछा।

जिस तरह से मैं इसे करता हूं वह ऐप/config/config.yml में एक नई कॉन्फ़िगरेशन सेटिंग जोड़ना है जो प्रोजेक्ट पैरामीटर फ़ाइल (ऐप/कॉन्फ़िगर/पैरामीटर.ini) से मूल्य में खींचता है।

ऐप्लिकेशन में/config/parameters.ini, एक database_socket मूल्य जोड़ने:

;[parameters.ini] 
database_socket = "/var/mysql/mysql.sock" 

और फिर ऐप्स/config/config.yml में, पैरामीटर मान में खींच:

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver: %database_driver% 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     unix_socket: %database_socket% 
     charset: UTF8 

कि सिद्धांत के कनेक्शन में कस्टम सॉकेट पथ पारित करेगा।

+1

यह वही है जो मुझे चाहिए था। मेरा mysql.sock/tmp dir में है। – zcopley