从 Laravel 中的 500 个表中查询

Query from 500 tables in Laravel

我想从 500 tables 中获取 Laravel 的查询。
所有table的列都是一样的,我想用查询得到每个table的最后一行
我一直在寻找解决方案,但没有得到很好的结果。
最后,我不得不使用下面的解决方案

$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();

我必须为每个 table 创建一个模型。
感谢您的指导

我认为您可以进行一个大查询,因为对数据库进行 500 次单独查询并不是一个好主意,而且 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 个模型 class 来表示同一事物。 所以无论如何你应该检查结构。

[编辑]

你可以考虑构建一个模型class,它可以根据实例化扩展构造函数的对象时传递的参数来改变table。 像这样:(只是一个想法)

<?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

?>