2013-04-10 19 views
32

Tôi muốn để có thể tạo ra một bảng sử dụngCó cách nào để phát hiện nếu một bảng cơ sở dữ liệu tồn tại với Laravel

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

Nhưng trước đó tôi muốn kiểm tra xem bảng đã tồn tại, có lẽ cái gì đó như

Schema::exists('mytable'); 

Tuy nhiên, chức năng trên không tồn tại. Tôi có thể sử dụng những gì khác?

+0

Bạn có thể cho biết tệp nào bạn đã thêm mã này không? –

Trả lời

105

Nếu bạn đang sử dụng Laravel 4 hoặc 5 sau đó là phương pháp hasTable(), bạn có thể tìm thấy nó in the L4 source code hoặc L5 docs:

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

'call_user_func_array() hy vọng tham số 1 là một cuộc gọi lại hợp lệ, lớp 'Illuminate \ Database \ MySqlConnection' không có phương thức 'hasTable'', tôi đã sử dụng' DB :: hasTable (' test ') 'vì không tìm thấy lớp Schema . – 151291

+0

thử DB :: kết nối ('xxxx') -> getSchemaBuilder() -> hasTable ('xxx') – efinal

2

Không có chức năng tích hợp cho tính năng này trong L3. Bạn có thể làm một truy vấn liệu:

$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

Cảm ơn! .. Tôi đang sử dụng Laravel 3. –

+0

Điều này không hoàn toàn tương thích chéo giữa các loại cơ sở dữ liệu. Ví dụ, nó không hoạt động với Sqlite hoặc Oracle. – Benubird

0

Thay vào đó, phụ thuộc vào thông tin truy vấn lược đồ thay vì kiểm tra một số dữ liệu trong các bảng với COUNT().

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

Thay đổi giá trị 'table_name' của bạn.

Nếu bạn nhận được một đầu ra hàng, điều đó có nghĩa là bảng tồn tại.

6

Để tạo bảng mới, chỉ có một kiểm tra bằng hàm lược đồ Laravel hasTable.

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

Nhưng nếu bạn muốn thả bất kỳ bảng nào trước khi kiểm tra sự tồn tại của nó thì Schema có hàm gọi là dropIfExists.

Schema::dropIfExists('table_name'); 

Nó sẽ thả bảng nếu bảng sẽ tồn tại.

Các vấn đề liên quan