2013-04-10 11 views
32

के साथ मौजूद है पता लगाने के लिए मैं अगर टेबल पहले से ही मौजूद है शायद की तरह कुछ की जाँच करने केवहाँ अगर एक डेटाबेस तालिका Laravel

Schema::create('mytable',function($table) 
{ 
    $table->increments('id'); 
    $table->string('title'); 
}); 

लेकिन उससे पहले मैं चाहूँगा का उपयोग कर एक तालिका बनाने के लिए सक्षम होना चाहते हैं कोई तरीका है

Schema::exists('mytable'); 

हालांकि, उपरोक्त फ़ंक्शन मौजूद नहीं है। मैं और क्या उपयोग कर सकता हूँ?

+0

क्या आप यह बता सकते हैं कि आपने यह कोड किस फ़ाइल को जोड़ा है? –

उत्तर

105

आप Laravel 4 या 5 का उपयोग कर रहे फिर वहाँ hasTable() विधि है, तो आप इसे in the L4 source code पा सकते हैं या L5 docs:: आप एक कच्चे क्वेरी कर सकते हैं

Schema::hasTable('mytable'); 
+0

'call_user_func_array() उम्मीद पैरामीटर 1 एक वैध कॉलबैक होने के लिए, वर्ग 'रोशन \ डाटाबेस \ MySqlConnection' एक विधि 'hasTable'', मैं' डीबी :: hasTable इस्तेमाल किया (' परीक्षण ') 'नहीं है क्योंकि स्कीमा वर्ग नहीं मिला । – 151291

+0

डीबी :: कनेक्शन ('xxxx') -> getSchemaBuilder() -> हैटेबल ('xxx') आज़माएं – efinal

2

एल 3 में इसके लिए कोई फ़ंक्शन नहीं बनाया गया है।

$table = "foo"; 
$check = DB::only('SELECT COUNT(*) as `exists` 
    FROM information_schema.tables 
    WHERE table_name IN (?) 
    AND table_schema = database()',$table); 
if(!$check) // No table found, safe to create it. 
{ 
    // Schema::create … 
} 
+1

धन्यवाद! .. मैं लार्वेल का उपयोग कर रहा हूं 3. –

+0

यह डेटाबेस प्रकारों में पूरी तरह से पार-संगत नहीं है। उदाहरण के लिए, यह स्क्लाइट या ओरेकल के साथ काम नहीं करता है। – Benubird

0

बल्कि, जानकारी पर निर्भर COUNT() के साथ तालिकाओं में कुछ डेटा की जांच करने के बजाय स्कीमा क्वेरी।

SELECT table_schema 
FROM information_schema.tables 
WHERE table_schema = DATABASE() 
     AND table_name = 'table_name'; 

अपना 'table_name' मान बदलें।

यदि आपको एक पंक्ति आउटपुट मिलता है, तो इसका मतलब है कि तालिका मौजूद है।

6

एक नई तालिका बनाने के लिए केवल एक ही Laravel स्कीमा समारोह hasTable द्वारा जांच होती है।

if (!Schema::hasTable('table_name')) { 
    // Code to create table 
} 

लेकिन अगर आप अपने अस्तित्व की जाँच से पहले किसी भी तालिका ड्रॉप करना चाहते हैं तो स्कीमा एक समारोह dropIfExists कहा जाता है।

Schema::dropIfExists('table_name'); 

तालिका मौजूद होने पर यह तालिका छोड़ देगा।

संबंधित मुद्दे