2017-11-06 3 views
0

레거시 PHP 응용 프로그램 용으로 만든 데이터베이스가 있습니다. 이 데이터베이스를 새로운 Laravel 응용 프로그램으로 가져옵니다.Laravel Eloquent 유사한 종류의 여러 테이블 작업

이 DB에는 구조가 같고 열 이름이 다른 1900 개의 테이블이 있으며 테이블마다 다른 이름이 있습니다. 그러나 각 테이블에는 다른 데이터가 있습니다. 각 테이블은 거래소의 주식을 소유하고 각 주식은 고가, 저가 및 종가에 대해 다른 데이터를가집니다.

이 테이블은 mysql에서 'like'명령을 사용하여 복제 된 stock '라는 단일 테이블에서 복사되었습니다.

제 질문은 어떻게 1900 마이그레이션 또는 모델 파일을 만들지 않고이 데이터베이스를 가져올 수 있습니까? 저는 광범위하게 그물에서 연구했지만 어떤 질문도 원격으로 유사 할 수 있습니다.

+2

내보내기를 생성 한 다음 해당 데이터베이스를 가져올 수 있습니다. – akbansa

+0

문제는 모든 파일을 만들거나 다른 것입니까? – Roots

+1

예, 1900 마이그레이션 및 모델을 만드는 것은 문제가되지만 반복적입니다. – Manu

답변

0

옵션은 동적 마이그레이션과 동적 모델을 모두 생성하는 옵션입니다. 모델의 다른 모든 속성과 기능을 유지하면서

마이그레이션

public function up() 
{ 
    for ($i = 1; $i < 1900; $i++) { 
     Schema::create('flights' . $i, function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('airline'); 
      $table->timestamps(); 
     }); 
    } 
} 

public function down() 
{ 
    for ($i = 1; $i < 1900; $i++) { 
     Schema::drop('flights' . $i); 
    } 
} 

모델 이제

class Flight extends Model 
{ 
    // 
    protected $table = 'my_flights'; 

    public function change_table(string $table) { 
     $this->table = $table; 
    } 
} 

당신은 즉석에서 corrosponding 테이블을 변경할 수 있습니다

+0

Schema :: create ('flights'. $ i, – Roots

+0

@Roots 그래, 너무 빨리 입력했습니다. –

+0

이것은 재앙입니다 ..! –

-1

단일 테이블로 쉽게 처리 할 수 ​​있습니다

,

항공편

public function up() 
{ 
    Schema::create('flights', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('airline'); 
     $table->string('stock_name'); // store stock name in this attribute 
     $table->timestamps(); 
    });  
} 

public function down() 
{  
    Schema::drop('flights');  
} 

비행 모델

class Flight extends Model 
{   
    protected $table = 'flights'; 

    // Scope to find data from a particular stock 
    public function scopeStock($q, $stockName) 
    { 
     return $q->where('stock_name', $stockName); 
    } 

} 

지금 당신이

간단하고 쉬운

$stockName = 'flight1'; 
$data = Flight::stock($stockName)->get(); // search using the scope 
//or 
$data = Flight::where('stock_name', 'flight1')->get(); // or do a query 

아래와 같이 어떤 특정 주식 테이블에서 검색 할 수 있습니다 마이그레이션 파일 ..! :)

+0

와우 !! 아무도 나를 설명 할 수 있습니까, 왜 투표가 내려 졌나요? –

+0

왜 같은 테이블에 열로 테이블 이름을 추가 하시겠습니까? 어떻게 각기 다른 이름의 테이블을 얻을 수 있을까요? – Manu

+0

당신이 말했듯이, 여러 주식 테이블을 가지고 있다면, 하나의 테이블에 다른 테이블의 모든 데이터를 저장하고 주식 테이블 이름을 저장하여 특정 주식 테이블의 데이터를 얻을 수 있습니다. 특정 주식에서 쉽게 데이터를 얻을 수있는 범위를 만들었습니다. ** $ data = Flight :: stock ($ stockTable) -> get(); ** –