作为程序员一定要保持良好的睡眠,才能好编程

laravel 获取表字段的方法

发布时间:2019-05-28

前言

最近的项目中有一个模块需要获取数据表中字段的注释,这样的需求相对来说比较冷门,所以网络上资源较少,经过这两天业余时间的资料收集,最终找到两种比较不错的方式来获取表字段注释。

方式一

通过Laravel执行下面的原生SQL来得到,这种方式是网上能找到的最普遍的方式,这条SQL语句不长,执行速度较快。

$sql = "SELECT COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db-name' AND TABLE_NAME = 'table-name' AND COLUMN_NAME = 'column-name'";
$result = \DB::select($sql);

PS:这里还有另外一条更加简洁的SQL语句:

SHOW FULL COLUMNS FROM `table-name`

方式二

通过doctrine/dbal包来实现,具体操作如下:

首先,安装doctrine/dbal包:

composer require doctrine/dbal

接下来就简单多了,直接执行如下代码即可获得表字段注释。

// 获取整张表的详细信息
$columns = \DB::getDoctrineSchemaManager()->listTableDetails('table-name');
// 获取年龄字段的注释
$ageColumnComment = $columns->getColumn('age')->getComment();
// 获取性别字段的注释
$sexColumnComment = $columns->getColumn('sex')->getComment();
......

这种方式相对第一种方式来说,性能稍微弱一点,但好在代码风格比较优雅,如果你比较看重代码风格,推荐使用第二种方式。







Illuminate\Support\Facades\Schema

$field=Schema::getColumnListing($this->table);

print_r($field);
exit;



$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);

$filtered = $collection->except(['price', 'discount']);

$data=$filtered->all();

print_r($data);
exit;
//$field=Schema::getColumnListing($this->table);
//
//print_r($field);
//exit;
$collection = collect([
  'serial' => 'UX301', 'type' => 'screen', 'year' => 2009,'name'=>'james'
]);

//$intersect = $collection->intersectByKeys([
//  'reference' => 'UX404', 'type' => 'tab', 'year' => 2011
//]);
//intersectByKeys 方法从原集合中移除在指定 数组 或集合中不存在的任何键:
$intersect = $collection->intersectByKeys([
  'type'=>'type'
]);

$data=$intersect->all();