有没有办法使用Laravel查询构建器获取表的主键名?我可以做点什么吗
$key = DB::table($someTable)->getPrimaryKey();
我查看了文档和API,但无法找到任何引用。
提前致谢。
答案 0 :(得分:2)
Illuminate/Database/Eloquent/Model
类的getKeyName
函数为public
。
在模型类中,您可以使用$this->getKeyName()
访问主键。
答案 1 :(得分:0)
您可以在模型上使用->getKey()
:
$someModel->getKey();
或者,如果您只是尝试获取列的名称,而没有该模型的实例:
app(App\Model::class)->getKeyName()
答案 2 :(得分:0)
$primary_key = app($builder->getModel())->getKeyName();
如果在初始化该查询生成器实例时引用了该模型,则可以检索该模型引用,然后使用它来获取keyName。但是,如果您只是直接调用了新的查询生成器,则无法在不对表键进行选择的情况下查看主键,也许是在子选择中?
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
答案 3 :(得分:0)
我的方法是:
$result = DB::select(DB::raw("SHOW KEYS FROM {$table} WHERE Key_name = 'PRIMARY'"));
$primaryKey = $result[0]->Column_name;
我使用mysql
答案 4 :(得分:0)
您可以直接使用模式管理器获取表的索引数组:
$indexes = DB::connection()->getDoctrineSchemaManager()->listTableIndexes($table);
OR
$indexes = Schema::getConnection()->getDoctrineSchemaManager()->listTableIndexes($table);
然后可以获得与该索引键关联的列的数组:
$columns = $indexes[ 'primary' ]->getColumns();
此功能可用于查找您一无所知的表的主键或唯一键:
public function getTablePrimaryOrUniqueKey($table, $key='') {
//get the array of table indexes
$indexes = DB::connection()->getDoctrineSchemaManager()->listTableIndexes($table);
//abort if there are no indexes
if(!is_array($indexes)) return false;
//set up the default array of index keys
$keys = ['primary', 'unique'];
//if a key was passed and it is valid, use it...but cast as an array
if($key!='' && in_array($key, $keys)) $keys = (array) $key;
//loop through the keys array
foreach ( $keys as $key ) {
//keep it honest
if ( array_key_exists( $key, $indexes ) ) {
//get the columns for this key
$columns = $indexes[ $key ]->getColumns();
//if we have an array of columns, we have what we need
if ( is_array( $columns ) ) {
return $columns;
}
}
}
//if you got here, you did not get find what you were looking for
return false;
}