2017-11-24 3 views
0

Laravel으로 500 테이블에서 쿼리를 가져오고 싶습니다.
모든 테이블의 열이 동일하고 쿼리를 사용하여 각 테이블의 마지막 행을 가져 오려고합니다.
해결책을 찾고 있었지만 좋은 결과를 얻지 못했습니다. 결국
, 나는Laravel의 500 개 테이블에서 쿼리

$data1 : DB::table('table1')->orderby('id','desc')->first(); 
$data2 : DB::table('table2')->orderby('id','desc')->first(); 
$data3 : DB::table('table3')->orderby('id','desc')->first(); 
. 
. 
. 
$data500 : DB::table('table500')->orderby('id','desc')->first(); 

아래 내가 모델을 만들 필요가 각 테이블에 대한 솔루션을 사용했다.

+0

"모든 테이블의 값이 같습니다"동일한 열을 의미합니까? – alvarofvr

+2

잘못된 데이터베이스 디자인과 같은 냄새가납니다. 같은 열이있는 500 개의 테이블? –

+0

이것은 데이터베이스 테이블 구조와 관계를 적절하고 현명하게 디자인해야하는 이유입니다. 500 개의 동일한 테이블은 단순히 잘못된 디자인입니다. 지금 당신은 왜 –

답변

1

나는 하나의 큰 쿼리를 데이터베이스에 별도의 쿼리로 만들 수 있다고 생각한다. 좋은 생각이 아니며 500 개의 객체 속성이 메모리 제한 오류를 발생시킬 수 있으므로 행 배열을 사용한다. 하나의 쿼리에 대해 하나의 객체. 다음과 같이

PHP 스크립트

제시 할 수 있습니다

<?php 

for ($i = 1; $i <= 500; $i++){ 
    $sql[] = "SELECT 'table{$i}' AS tableName, t{$i}.* FROM table{$i} AS t{$i} WHERE t{$i}.id = (SELECT MAX(id) FROM table{$i})"; 
} 

$query = implode(" UNION ALL ", $sql); 

//get array instead objects 
$result = array_map(function ($value) { 
    return (array) $value; 
}, DB::select($query)); 


?> 

을 그리고 난 당신이 같은 일을 대표하는 500 개 모델 클래스를 가질 수 없습니다 생각합니다. 어쨌든 구조를 검토해야합니다.

[편집] 당신은 생성자를 확장 객체를 인스턴스화 할 때 전달하는 매개 변수를 기반으로 테이블을 변경할 수있는 모델 클래스를 구성하는 것을 고려할 수

. 마찬가지로 : (그냥 아이디어)

<?php 

class Table extends Model 
{ 
    public function __construct($tableNum = '1', array $attributes = array()) 
    { 
     parent::__construct($attributes); 

     $this->table = $tableNum; 
    }  
} 

$model= new Table('500'); //extended constructor accept the param and set table 
$model->getTable(); //return table500 

?> 
+0

tnx @alvarofvr를 편집 한 이유를 배우기 시작했습니다. 귀하의 솔루션은 답변에 가까웠습니다. –

+0

좋아, 표시 : :) – alvarofvr

관련 문제