mysql - Laravel 中如何通过 Model 判断一个表的列是否为外键?

标签 mysql laravel eloquent model foreign-keys

所以正如标题所说,我如何知道模型的字段是否是 Laravel 中的外键?

假设我有一个名为 show_type_id 的 FK 列和一个名为 Event 的模型,我想知道是否存在给定模型类或模型表的函数,如果是,则命名字段返回 true,否则返回 false。

...
$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;

}

最佳答案

试试这个,假设你的表名是“events”:

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);
}

关于mysql - Laravel 中如何通过 Model 判断一个表的列是否为外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64153753/

相关文章:

Laravel 属性转换

mysql - 迁移到新的数据库服务器,同样的查询非常慢

laravel - 有什么方法可以加快 ffmpeg 处理时间

php - 来自外部源的 Laravel Eloquent 无表数据

php - Laravel 5.1 中的空 where 子句更喜欢 Eloquent 方法

laravel - Laravel Eloquent-如何查询不喜欢?

mysql - 如何在 MySQL 中将现有列更改为默认插入时的当前时间?

php - 使用 PHP MySQL 获取表单数据,但 $_POST 出现问题

php - 更改表排序规则 LIKE 子句不会返回任何内容

Laravel - 如何使用规则请求制作唯一的两个字段