【发布时间】:2016-12-02 18:35:19
【问题描述】:
我正在尝试将更改保存到一个数据库表中的记录,该表具有 2 个元素的复合键。 当我尝试使用 Model::updateOrCreate 或 Model::firstOrCreate 方法时,我从数据库中收到一个错误,告诉我 id 不存在。 看起来 laravel 在创建查询时忽略了我提到的初级键。
我的模特:
class CatalogueCatLanguage extends Model
{
public $incrementing = false;
protected $table = "CatalogueCatLanguages";
protected $fillable = ["cataloguecategory_id","language_id","name","description"];
protected $primaryKey = ["cataloguecategory_id","language_id"];
}
我在控制器方法中的代码:
CatalogoCatLingua::updateOrCreate(
[
"cataloguecategory_id"=>$trad["category"],
"language_id"=>$trad["language"]
],[
"name"=>$trad["langName"],
"description"=>$trad["langDescription"]
]
);
当我拥有“primaryKey”属性时出现的错误:
isset 中的偏移类型非法或为空
当我注释了“primaryKey”属性时出现的错误:
SQLSTATE[42S22]:找不到列:1054 'where 子句'中的未知列 'id'
我已经尝试了几种组合和方法,但是我没有得到导致此错误的原因。
提前谢谢你。
【问题讨论】:
-
奇怪,我来这里是为了寻找支持多语言的相同用例的答案。
-
对于从谷歌搜索中偶然发现此问题的任何人,覆盖
setKeysForSaveQuery可以解决此问题,如本文laracasts.com/discuss/channels/laravel/… 中所述。
标签: php mysql laravel eloquent