क्या यह पता लगाने का कोई तरीका है कि क्या एक डेटाबेस तालिका लारवेल के पास मौजूद है


88

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

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

लेकिन इससे पहले मैं जांचना चाहूंगा कि क्या तालिका पहले से मौजूद है, शायद कुछ ऐसा है

Schema::exists('mytable');

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


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

जवाबों:


224

आप Laravel 4 या 5 का उपयोग कर रहे हैं, तो फिर वहाँ है hasTable()विधि, आप इसे पा सकते हैं L4 स्रोत कोड में या L5 डॉक्स :

Schema::hasTable('mytable');

call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable', मैंने उपयोग किया DB::hasTable('test')क्योंकि स्कीमा वर्ग नहीं मिला।
151291

10
DB की कोशिश करें :: कनेक्शन ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal

मैंने यह कोशिश की और यह काम कर रहा है ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

स्कीमा :: कनेक्शन ("बायो_डब") -> हैटेबल ('डिवाइसलॉग्स_11_2019')
कुमार

24

एक नई तालिका बनाने के लिए लारवेल स्कीमा फ़ंक्शन द्वारा केवल एक चेक है hasTable

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

लेकिन अगर आप इसके अस्तित्व की जाँच करने से पहले किसी तालिका को छोड़ना चाहते हैं तो स्कीमा के पास एक फ़ंक्शन है dropIfExists

Schema::dropIfExists('table_name');

यह तालिका को गिरा देगा यदि तालिका मौजूद होगी।


4

यदि आप अलग-अलग कनेक्शन का उपयोग कर रहे हैं तो आपको मेरे उत्तर के साथ जाना होगा।

Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')

यहां hasTable()फ़ंक्शन पर आप 1 से अधिक तालिका नाम पास कर सकते हैं।


3

L3 में इसके लिए कोई फ़ंक्शन नहीं बनाया गया है। आप एक कच्ची क्वेरी कर सकते हैं:

$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.
एहसान जरगर इरशादी

यह डेटाबेस प्रकारों में पूरी तरह से क्रॉस-संगत नहीं है। उदाहरण के लिए, यह Sqlite या Oracle के साथ काम नहीं करता है।
बेनुबर्ड

0

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

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

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

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


0

जैसा कि Phill Sparks ने उत्तर दिया, आप जाँच कर सकते हैं कि क्या कोई तालिका मौजूद है:

Schema::hasTable('mytable')

ध्यान दें कि ऐसे मामले हैं जब आपका ऐप विभिन्न कनेक्शनों का उपयोग करता है। इस मामले में, आपको उपयोग करना चाहिए:

Schema::connection('myConnection')->hasTable('mytable')

( use Schema;अपने कोड की शुरुआत में उपयोग करना न भूलें )।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.