【问题标题】:Laravel 5.8 get tables belonging to a userLaravel 5.8 获​​取属于用户的表
【发布时间】:2019-03-14 12:48:59
【问题描述】:

我在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);
    }
}

【问题讨论】:

    标签: php eloquent laravel-5.8


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可能需要走很长的路。

      通过使用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];
      

      【讨论】:

        猜你喜欢
        • 2017-02-13
        • 1970-01-01
        • 2020-02-14
        • 2019-12-31
        • 2021-10-01
        • 1970-01-01
        • 2020-05-11
        • 2021-10-08
        • 1970-01-01
        相关资源
        最近更新 更多