2016-09-26 126 views
0

我有具有以下列模型:Laravel 5.2锋主键作为多键

  • blog_id(fillabale)
  • 日期(可填写)
  • 计数器

独特键上blog_id +日期

无论何时我试图通过使用此表获得结果,例如,

$model = BlogCounter::findOrNew(2,'2016-09-25'); 

或者

$model = BlogCounter::whereBlogId(2)->whereDate('date','=','2016-09-25')->first() 

我收到提示:

column blog_counter.id does not exist

我试图重写的PrimaryKey并将其设置为空 /[ 'blog_id', '日期']/'blog_id,date' 以上都没有解决这个问题,试图通过id原始提取。

I don在这个表上没有主键,因为我使用的是唯一键。

我错过了什么吗?如何强制Eloquent模型在没有主键的情况下工作?

BTY,我现在使用的是PostgreSQL 9.5。

谢谢!

+0

您不能因为laravel仅为雄辩模型的关键属性提供find方法。所以你必须建立一个主键字段。看到这个https://github.com/laravel/framework/issues/5355 –

+0

你发布的错误是由第一个使用findOrNew的查询返回的,你用第二个使用wheres/first的查询得到的错误是什么? –

回答

0

Eloquent假设表中有一个ID列标识一行。在你的情况下,这一列被命名为blog_id所以你需要让Eloquent知道。

您可以通过在模型中定义primaryKey属性来实现此目的。只要它可以用于获取单个记录,它不需要是数据库中的主键:

class BlogCounter extends Model { 
    protected $primaryKey = 'blog_id'; 
} 
+0

@ edrzej.kurylo我的“钥匙”是2个字段(唯一)的组合 date + blog_id .. 这就是我在努力.. –

+0

雄辩不支持组合键,所以你不能使用找到*()方法来获取记录。您需要将自己的逻辑添加到模型中 –