问题描述
因此,正如标题所述,我怎么知道Model的字段是否是Laravel中的外键?
假设我有一个名为show_type_id的FK列和一个名为Event的模型,并且我想知道是否有一个给定模型类或模型表的函数,并且命名字段如果为true则返回true,否则为false。 / p>
...
$model = Event:class; // or Event::getTable();
$isFK = isFK('show_type_id',$model);
...
编辑
感谢@piscator,这是有效的方法:
use Illuminate\Support\Facades\Schema;
function isFK(string $table,string $column): bool
{
$fkColumns = Schema::getConnection()
->getDoctrineschemaManager()
->listTableForeignKeys($table);
$fkColumns = collect($fkColumns);
return $fkColumns->map->getColumns()->flatten()->search($column) !== FALSE;
}
解决方法
尝试此操作,假设您的表名是“事件”:
Schema::getConnection()
->getDoctrineSchemaManager()
->listTableForeignKeys('events')
这将返回Doctrine\DBAL\Schema\ForeignKeyConstraint
对象。
有了这些数据,您可以像这样编写isFK
方法:
use Illuminate\Support\Facades\Schema;
function isFK(string $table,string $column): bool
{
$fkColumns = Schema::getConnection()
->getDoctrineSchemaManager()
->listTableForeignKeys($table);
return collect($fkColumns)->map(function ($fkColumn) {
return $fkColumn->getColumns();
})->flatten()->contains($column);
}