Laravel에 데이터베이스 테이블이 있는지 감지하는 방법이 있습니까?


87

나는 사용하여 테이블을 만들 수 있기를 원합니다

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

그러나 그 전에 테이블이 이미 존재하는지 확인하고 싶습니다.

Schema::exists('mytable');

그러나 위의 기능은 존재하지 않습니다. 그 밖에 무엇을 사용할 수 있습니까?


이 코드를 추가 한 파일을 알려주시겠습니까?
야세르 무사

답변:


218

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 :: connection ( 'xxxx')-> getSchemaBuilder ()-> hasTable ( 'xxx')
시도

나는이 시도하고는 ... 일하고있어DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

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

23

새 테이블을 생성하려면 Laravel Schema 함수에 의한 검사가 하나뿐입니다 hasTable.

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()함수에서 둘 이상의 테이블 이름을 전달할 수 있습니다.


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 2013

이것은 데이터베이스 유형간에 완전히 상호 호환되지 않습니다. 예를 들어 Sqlite 또는 Oracle에서는 작동하지 않습니다.
Benubird

0

대신 .NET Framework를 사용하여 테이블의 일부 데이터를 확인하는 대신 정보 스키마 쿼리에 의존하십시오 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.