Có cách nào để phát hiện bảng cơ sở dữ liệu tồn tại với Laravel không


87

Tôi muốn có thể tạo một bảng bằng cách sử dụng

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 chưa, có lẽ 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 gì khác?


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

Câu trả lời:


219

Nếu bạn đang sử dụng Laravel 4 hoặc 5 thì có hasTable()phương pháp này, bạn có thể tìm thấy nó trong mã nguồn L4 hoặc tài liệu 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', Tôi đã sử dụng DB::hasTable('test')vì không tìm thấy lớp Schema.
151291

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

tôi cố gắng này và nó làm việc ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

Schema :: kết nối ( "bio_db") -> hasTable ( 'deviceLogs_11_2019')
Pankaj Kumar

23

Để tạo một bảng mới, chỉ có một lần kiểm tra bằng hàm Laravel Schema hasTable.

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

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

Schema::dropIfExists('table_name');

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


4

nếu bạn đang sử dụng kết nối khác thì bạn phải đi với câu trả lời của tôi.

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

ở đây trên hasTable()hàm bạn có thể chuyển nhiều hơn 1 tên bảng.


3

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

$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.
Ehsan Zargar Ershadi

Đ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 truy vấn lược đồ thông tin 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 'table_name'giá trị của bạn .

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


0

Như Phill Sparks đã trả lời, bạn có thể kiểm tra xem bảng có tồn tại hay không bằng cách sử dụng:

Schema::hasTable('mytable')

Lưu ý rằng có những trường hợp ứng dụng của bạn sử dụng các kết nối khác nhau. Trong trường hợp này, bạn nên sử dụng:

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

(Đừng quên sử dụng use Schema;trên đầu mã của bạn).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.