0

我列出了所有以(例如DB:)为前缀的表,如下所示:user->id + _2_my_table

$account = Auth()->user();
$tables = DB::select("SHOW TABLES LIKE '" . $account->id . "_%'");

这有效并返回一个像这样的数组:

array:1 [▼
  0 => {#577 ▼
    +"Tables_in_mydb (2_%)": "2_country_list"
  }
]

为什么将(2_%)搜索模式添加到Tables_in_mydb属性中?

这会导致稍后在尝试像这样描述表格时出现问题:

if (count($tables)) {
    foreach ($tables as $table) {
        $table->columns = DB::select('describe '.$table->Tables_in_mydb);
        $table->rows = DB::select('SELECT COUNT(*) AS count FROM '.$table->Tables_in_mydb);
    }
}
4

2 回答 2

0

固定这样。但是还是不明白原来的问题。

$tables = collect(DB::select('show tables'))->filter(function ($val) use (&$account) {
    foreach ($val as $key => $tbl) {

        $tbl_prefix = $account->id . "_";
        $tbl_prefix_length = strlen($tbl_prefix);

       if (substr($tbl, 0, $tbl_prefix_length) == $tbl_prefix) {
            return $tbl;
       }

    }
});
于 2019-03-14T13:02:02.410 回答
0

你可能不得不走很长的路。

通过使用get_object_vars,您可以将对象值放入数组中。然后使用 array_values 来获取值:

 $table_name_arr = array_values(get_object_vars($table));

这将提供一个数组(0 => '2_country_list'),您可以轻松获得$table_name_arr[0]

对于单线,使用

$table_name = array_values(get_object_vars($table))[0];
于 2019-03-14T13:02:30.050 回答