从 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
?>
我想从 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
?>