লারাভেলের সাথে কোনও ডাটাবেস টেবিল উপস্থিত রয়েছে কিনা তা সনাক্ত করার কোনও উপায় আছে কি?


88

আমি ব্যবহার করে একটি সারণী তৈরি করতে সক্ষম হতে চাই

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

তবে তার আগে আমি টেবিলটি ইতিমধ্যে উপস্থিত রয়েছে কিনা তা দেখতে চাই, সম্ভবত এর মতো কিছু

Schema::exists('mytable');

তবে উপরের ফাংশনটি বিদ্যমান নেই। আমি আর কি ব্যবহার করতে পারি?


আপনি কোন ফাইলটি এই কোডটি যুক্ত করেছেন তা বলতে পারবেন?
ইয়াসের মোছা

উত্তর:


224

আপনি যদি লারাভেল 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
ডিবি :: কানেকশন ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
এফাইনাল

আমি এটি চেষ্টা করে DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
দেখছি

স্কিমা :: সংযোগ ("বায়ো_ডিবি") -> হ্যাশ টেবিল ('ডিভাইস লোগস_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 …
}

4
ধন্যবাদ! .. আমি
লারাভেল

এটি সম্পূর্ণ ডাটাবেস ধরণের ক্রস-সামঞ্জস্যপূর্ণ নয়। উদাহরণস্বরূপ, এটি স্ক্লাইট বা ওরাকল দিয়ে কাজ করে না।
বেনুবার্ড

0

বরং, সারণীতে কিছু ডেটা পরীক্ষা করার পরিবর্তে তথ্য স্কিমা ক্যোয়ারির উপর নির্ভর করুন COUNT()

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

আপনার 'table_name'মান পরিবর্তন করুন ।

যদি আপনি একটি সারির আউটপুট পান তবে এর অর্থ টেবিলটি বিদ্যমান।


0

ফিল স্পার্কস উত্তর হিসাবে, আপনি টেবিল ব্যবহার করে তা পরীক্ষা করতে পারেন:

Schema::hasTable('mytable')

লক্ষ্য করুন যে আপনার অ্যাপ্লিকেশন বিভিন্ন সংযোগ ব্যবহার করে। এই ক্ষেত্রে, আপনার ব্যবহার করা উচিত:

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

( use Schema;আপনার কোডের শুরুতে ব্যবহার করতে ভুলবেন না )।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.