如何获取泛型表单的 Laravel 5.2 模型字段名称和类型


How to get Laravel 5.2 model field names and types for generic forms

我想构建一个通用的表单创建器,它基本上采用某个 Eloquent 模型并自动构建包含其所有字段的表单。

因此,我需要知道模型的所有字段及其(数据)类型。所以我有两个问题:

  1. 有没有办法做到这一点,一般来说这是一个聪明的主意吗?
  2. 是否有任何易于使用的软件包,可以做同样的事情并与 laravel 5.2 一起使用。(我尝试了FrozenNode的Laravel-Administrator,但dos仅适用于laravel 4,我不需要它的所有功能)

感谢您的帮助!

最好西蒙

以下是我的做法:

$model = new ExampleModel();
$model->getConnection()->getSchemaBuilder()->getColumnListing($model->getTable());

到您的模型添加方法:

public function getColumnsNames() {
    return (array) $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable());
}
$schema = 'DB::getDoctrineSchemaManager();
$columns = $schema->listTableColumns('table_name'); //get table columns
foreach ($table->getColumns() as $column) { //run loop
   $column->getName(). - .$column->getType()->getName(); //here you can define your inputes
}

我发现的各种解决方案的问题在于,它们都依赖于不再包含在Laravel中的教义。

这就是为什么你得到那个原则''DBAL错误。

因此,我尝试将其作为依赖项包含在内,但这仍然给出了错误。

当我查看源代码,试图解决错误时,我注意到还有另一种方法:getPdo()。

所以,在绝望中,我使用了它。

$pdo = 'DB::getPdo();
$select = $pdo->query('SELECT '.$field.' FROM '.$table. ' WHERE ID = "'.$id.'"');
$meta = $select->getColumnMeta(0);
dd($meta);

在本例中,返回:

array:7 [
"native_type" => "VAR_STRING"
"pdo_type" => 2
"flags" => array:1
"table" => "photologs"
"name" => "slug"
"len" => 60
"precision" => 0
]

现在,这很混乱,您必须运行另一个查询才能获得结果。

在我的实例中,我正在开发一种方法,该方法将为您提供有关特定字段的所有信息,因此已经知道表和字段名称。

我的解决方案绝不是完整的,但它确实有效,您应该能够对其进行调整以适应。

如果你找到了更好的方法,请告诉!