did*_*x16 6 mysql model foreign-keys laravel eloquent
正如标题所说,我如何知道 Model 的字段是否是 Laravel 中的外键?
假设我有一个名为 show_type_id 的 FK 列和一个名为 Event 的模型,我想知道是否有一个函数给定模型类或模型表,并且指定字段如果是则返回 true,如果不是则返回 false。
...
$model = Event:class; // or Event::getTable();
$isFK = isFK('show_type_id', $model);
...
Run Code Online (Sandbox Code Playgroud)
感谢@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;
}
Run Code Online (Sandbox Code Playgroud)
尝试一下,假设您的表名称是“events”:
Schema::getConnection()
->getDoctrineSchemaManager()
->listTableForeignKeys('events')
Run Code Online (Sandbox Code Playgroud)
这将返回该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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3025 次 |
最近记录: |