Laravel 5.8 получает таблицы, принадлежащие пользователю - PullRequest
0 голосов
/ 14 марта 2019

Я перечисляю все таблицы в 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Возможно, вам придется пройти долгий путь.

Используя 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];
0 голосов
/ 14 марта 2019

Исправлено такНо до сих пор не понимаю, оригинальный вопрос.

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

    }
});
...