gpt4 book ai didi

php - 在 Laravel 中查询 500 个表

转载 作者:行者123 更新时间:2023-11-29 10:30:37 25 4
gpt4 key购买 nike

我想使用 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();

对于每个表,我都必须创建一个模型。
谢谢您的指导

最佳答案

我认为您可以进行一个大查询,因为对数据库进行 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 个模型类来表示同一事物。因此无论如何您都应该检查结构。

[编辑]

您可以考虑构造一个模型类,该模型类可以根据实例化扩展构造函数的对象时传递的参数来更改表。像这样:(只是一个想法)

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

?>

关于php - 在 Laravel 中查询 500 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com