如何从laravel中的表中选择所有列名?

时间:2016-05-11 08:40:21

标签: php laravel laravel-5

我试图从表 Teller

中获取所有列名

功能:

public function getTableColumns($tables)
{
    return DB::select(DB::raw('SELECT 
                                    COLUMN_NAME, 
                                    DATA_TYPE, 
                                    COLUMN_DEFAULT
                                FROM 
                                    INFORMATION_SCHEMA.COLUMNS
                                WHERE 
                                    table_name = `Teller`'));
}

11 个答案:

答案 0 :(得分:23)

您只需执行此操作即可获取所有列名称...

public function getTableColumns($table)
{
    return DB::getSchemaBuilder()->getColumnListing($table);

    // OR

    return Schema::getColumnListing($table);

}

答案 1 :(得分:8)

从模型获取表名



$product = new Product;
$table = $product->getTable();
print_r($table);




从表格

获取表格列名称



<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{   
    public function getTableColumns() {
        return $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable());
    }
}
&#13;
&#13;
&#13;

现在,您将获得&#34;产品的所有专栏&#34;表格和如果你需要它在控制器,那么你可以通过以下方式得到它:

&#13;
&#13;
 $product=new Product;
 $columns=$product->getTableColumns();
 print_r($columns);
&#13;
&#13;
&#13;

答案 2 :(得分:2)

从Laravel 6.x开始,此方法有效:

                    $db = DB::connection()->getPdo();
                    $rs = $db->query('SELECT * FROM Teller LIMIT 0');
                    for ($i = 0; $i < $rs->columnCount(); $i++) {
                            $col = $rs->getColumnMeta($i);
                            $columns[] = $col['name'];
                    }
                    print_r($columns);

这里的提示只是四处张扬(应该提供一种简单的方法来执行此操作,但显然不会),先获取PDO对象,然后use the answer from the same question for straight PDO access

当未通过将“ Teller”替换为databasename.Teller来选择数据库时,这也将起作用。

HTH,

-英尺

答案 3 :(得分:1)

您只需要从查询响应中提取键

array_keys(json_decode(json_encode($table[0]), true))

答案 4 :(得分:0)

如果有多个数据库连接,请尝试以下操作:

在您的php脚本顶部添加

use Illuminate\Support\Facades\Schema;

检索代码中的任何地方

具有数据库连接

$columns = Schema::Connection('business')->getColumnListing('users'); // 'business' is your database connection

        echo "<pre>";
        print_r($columns);
        exit();

没有数据库连接

$columns = Schema::getColumnListing('users');

    echo "<pre>";
    print_r($columns);
    exit();

答案 5 :(得分:0)

使用集合的模型的另一种方式。

collect(User::first())->keys();

答案 6 :(得分:0)

@Eduardo Wallace 方法最简单;只返回表中的第一个值,去掉离开键的值

$T1 = table_name::first();
$table_columns = array_keys(json_decode($T1, true));

如果你不需要所有的列,去掉不需要的列,只留下需要的列:

$needed_columns = array_diff($table_columns, ['unneeded_1', 'unneeded_2']);

你可以争论所使用的方法,反正对我来说最简单!

答案 7 :(得分:0)

$db = [];
$tables =  DB::select('SHOW TABLES');

    foreach ($tables as $key => $table) {
        $name = $table->Tables_in_app;
        $app[$name] =  DB::getSchemaBuilder()->getColumnListing($name);
    }

return $db;

答案 8 :(得分:-1)

你可以写一下:

public function getTableColumns($tables)
{
    return DB::select(
        DB::raw('SELECT * FROM `Teller`')
    );
}

如果您拥有Teller型号,也可以使用Teller::all();

<强>更新

要获取所有列名称,您可以运行SHOW FIELDS Teller

答案 9 :(得分:-1)

从表中获取所有原始数据:

 $users = DB::table('users')->get();

此方法将直接返回列的值:

$email = DB::table('users')->where('name', 'John')->value('email');

参见:

  

https://laravel.com/docs/5.1/queries

答案 10 :(得分:-1)

您可以使用此

DB::table('table_name')->get();