微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过Model知道表列是否是Laravel中的外键?

如何解决如何通过Model知道表列是否是Laravel中的外键?

因此,正如标题所述,我怎么知道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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。