Yii——关于无主键的数据表或视图

Posted alanabc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii——关于无主键的数据表或视图相关的知识,希望对你有一定的参考价值。

使用 yii 写 restful api 时,有一个数据库视图因为没有主键而不能被正确的按主键查询。通常情况下可以通过类似 ViewName::findOne([‘primaryKey‘ => 1]) 的方法,指定一个查询字段。

但是这不是最方便的解决办法,我们可以在模型(Model)中可以手动设置一个主键,然后就可以愉快的使用 ViewName::findOne(1) 查询了:

错误示例

public static function primaryKey()
{
    return ‘primaryKey‘;
}

报错

SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘p‘ in ‘where clause‘ The SQL being executed was: SELECT * FROM `view_name` WHERE `p`=‘1‘

可见只把 ‘primary‘ 的首字母 ‘p‘ 给拿出来了,并不是我们希望的主键。

正确示例

public static function primaryKey()
{
    return [‘primaryKey‘];
}

原因

大概算是个 feature,源码中有官方注释:

Note that an array should be returned even for a table with single primary key.

具体原因还需要再深究一下,欢迎请补充!

以上是关于Yii——关于无主键的数据表或视图的主要内容,如果未能解决你的问题,请参考以下文章

springdataJpa对无主键表或视图查询的支持

MySQL无主键表查找

转载备库由于表无主键导致延迟

关于oracle中 根据一个表的主键数据同步更新另一个关联表的字段。

关于主键的设计primary key

使用 FireDac 仅更新重复行中的 1 个(无主键或唯一字段)