มีวิธีใดบ้างในการตรวจสอบว่ามีตารางฐานข้อมูลอยู่กับ Laravel หรือไม่


88

ฉันต้องการสร้างตารางโดยใช้ไฟล์

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

แต่ก่อนหน้านั้นฉันต้องการตรวจสอบว่ามีโต๊ะอยู่แล้วหรือไม่อาจจะเป็นอย่างนั้น

Schema::exists('mytable');

อย่างไรก็ตามไม่มีฟังก์ชันข้างต้น ฉันสามารถใช้อะไรได้อีกบ้าง?


คุณช่วยบอกไฟล์ที่คุณเพิ่มรหัสนี้ได้ไหม
Yasser Moussa

คำตอบ:


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')เนื่องจากไม่พบคลาส Schema
151291

10
ลองใช้ DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal

ฉันลองแล้วมันได้ผล ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

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

24

hasTableการสร้างตารางใหม่มีเพียงหนึ่งการตรวจสอบโดยฟังก์ชั่น Laravel Schema

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

แต่ถ้าคุณต้องการที่จะลดลงตารางใด ๆ ก่อนการตรวจสอบการดำรงอยู่ของ Schema 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
ขอบคุณ! .. ฉันใช้ Laravel 3
Ehsan Zargar Ershadi

ไม่สามารถใช้งานข้ามกันได้อย่างสมบูรณ์ในประเภทฐานข้อมูล ตัวอย่างเช่นใช้ไม่ได้กับ Sqlite หรือ Oracle
Benubird

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;ที่จุดเริ่มต้นของรหัสของคุณ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.