无法使用 laravel eloquent ORM 插入 PostgreSQL
Posted
技术标签:
【中文标题】无法使用 laravel eloquent ORM 插入 PostgreSQL【英文标题】:Unable to insert into PostgreSQL using laravel eloquent ORM 【发布时间】:2014-04-17 00:42:03 【问题描述】:在发布之前我做了很多研究。
尝试使用 Laravel eloquent ORM 将记录插入 PostgreSQL 时出现以下错误。
这是错误:
Illuminate \ Database \ QueryException
SQLSTATE[42703]: Undefined column:
7 ERROR: column "id" does not exist LINE 1: ...ed_at", "created_at")
values ($1, $2, $3, $4)
returning "id" ^ (SQL: insert into "fb_post_like_counts" ("post_id", "count", "updated_at", "created_at") values (293843523498_10152007721598499, 0, 2014-03-12 16:56:24, 2014-03-12 16:56:24) returning "id")
这是数据库表创建模式:
Schema::create('fb_post_shares_counts', function($table)
//
$table->string('post_id');
$table->string('count')->default(0);
// created_at updated_at deleted_at
$table->timestamps();
$table->softDeletes();
// set composite keys
$table->primary(array('post_id', 'updated_at'));
);
这是我要执行的代码:
// SAVE POST SHARES
$post_share_count = new FbPostShareCount;
$post_share_count->post_id = $response['id'];
$post_share_count->count = $fql_post['share_count'];
$post_share_count->save();
我创建了一个模型类 FbPostShareCount 扩展了 Eloquent。
我知道 laravel 不支持复杂的键但是我使用 mysql 的时候没有出现这个问题
【问题讨论】:
等待反馈。解决了吗? 【参考方案1】:将FbPostShareCount
模型中的主键设置为
class FbPostShareCount extends Eloquent
protected $primaryKey = 'post_id';
...
【讨论】:
同样的错误。只是为了记录,我在附加架构的数据库中使用复合键。 据我所知,eloquent 目前不支持复合键。 @MoFetch Antonio Carlos Ribeiro 是对的。但是,正如arcsum 也说过,它应该是INTEGER 作为PK 的ID。【参考方案2】:Laravel eloquent ORM 有自增功能,所以设置 primaryKey = null 和 increment = false。
protected $primaryKey = null;
public $incrementing = false;
【讨论】:
【参考方案3】:您是否尝试过为帖子 ID 使用正确的数据类型?
$table->integer('post_id');
【讨论】:
以上是关于无法使用 laravel eloquent ORM 插入 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章
我收到此错误:类 Illuminate\Database\Eloquent\Builder 的对象无法在 laravel ORM 中转换为字符串
Laravel 4:如何使用 Eloquent ORM“排序”[重复]