Laravel Eloquent使用类似的多个表格

时间:2017-11-06 12:58:41

标签: php mysql laravel laravel-eloquent

我有一个为遗留php应用程序创建的数据库。我正在将此数据库导入新的Laravel应用程序。

这个DB有1900个表具有相同的结构,列名和其他所有表只有不同的名称。但每个表中都有不同的数据。具体而言,每个表属于交易所的股票,每个股票具有高,低和收盘价的不同数据。

此表格已从名为stock的单个表格中复制,使用' like'进行复制。命令在mysql中。

我的问题是如何在不创建1900迁移或模型文件的情况下导入这些数据库。我已经在网上对其进行了广泛的研究,但是甚至可以找到任何类似的问题。

2 个答案:

答案 0 :(得分:-1)

一个选项是创建动态迁移和动态模型。

<强>移植

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;
    }
}

现在您可以动态更改相应的表格,同时保留模型的所有其他属性和功能

答案 1 :(得分:-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

简单易行......! :)