Laravel 5.2 Eloquent 主键作为多键
Posted
技术标签:
【中文标题】Laravel 5.2 Eloquent 主键作为多键【英文标题】:Laravel 5.2 Eloquent primary key as a multiple key 【发布时间】:2017-02-03 13:31:56 【问题描述】:我有一个包含以下列的模型:
blog_id (fillabale) 日期(可填写) 计数器blog_id + 日期的唯一键
每当我试图从这个表中获取结果时,例如,
$model = BlogCounter::findOrNew(2,'2016-09-25');
或者
$model = BlogCounter::whereBlogId(2)->whereDate('date','=','2016-09-25')->first()
我收到错误:
列 blog_counter.id 不存在
我试图覆盖 primaryKey 并将其设置为 null / ['blog_id', 'date'] / 'blog_id,date' 以上都没有解决 Eloquent 试图通过 id 获取 raw 的问题..
我在这张表上没有主键,因为我使用的是唯一键。
我错过了什么吗?如何强制 Eloquent 模型在没有主键的情况下工作?
BTY,我现在使用的是 PostgreSQL 9.5。
谢谢!
【问题讨论】:
你不能,因为 laravel 只对 eloquent 模型的关键属性提供 find 方法。所以你必须制作一个主键字段。看到这个github.com/laravel/framework/issues/5355 您发布的错误是由使用 findOrNew 的第一个查询返回的,您在使用 wheres/first 的第二个查询时遇到什么错误? 【参考方案1】:Eloquent 假定您的表中有一个 id 列来标识一行。在您的情况下,此列名为 blog_id,因此您需要让 Eloquent 知道。
您可以通过在模型中定义 primaryKey 属性来做到这一点。它不需要是数据库中的主键,只要它可以用于获取单个记录即可:
class BlogCounter extends Model
protected $primaryKey = 'blog_id';
【讨论】:
@edrzej.kurylo 我的“关键”是 2 个字段(唯一)日期 + blog_id 的组合。这就是我正在努力解决的问题。 Eloquent 不支持复合键,所以不能使用 find*() 方法来获取记录。您需要将自己的逻辑添加到模型中以上是关于Laravel 5.2 Eloquent 主键作为多键的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent Model :: find不起作用
在 Eloquent 查询/Laravel 5.2 中使用变量
Laravel 5.2 pluck() 来自 Eloquent 模型集合的多个属性
Laravel 5.2,Eloquent,将表 1 连接到表 2 并带上表 2 的 MAX 列