Php Laravel雄辩更新或创建复合密钥
我试图将对记录的更改保存在一个数据库表中,该表具有由2个元素组成的复合键。 当我尝试使用Model::updateOrCreate或Model::firstOrCreate方法时,从数据库中得到一个错误,它告诉我id不存在。 看起来laravel在创建查询时忽略了我提到的素数键 我的模型:Php Laravel雄辩更新或创建复合密钥,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我试图将对记录的更改保存在一个数据库表中,该表具有由2个元素组成的复合键。 当我尝试使用Model::updateOrCreate或Model::firstOrCreate方法时,从数据库中得到一个错误,它告诉我id不存在。 看起来laravel在创建查询时忽略了我提到的素数键 我的模型: class CatalogueCatLanguage extends Model { public $incrementing = false; protected $table = "Catalog
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]:未找到列:“where子句”中的1054未知列“id”
我已经尝试了几种组合和方法,但是我不知道是什么导致了这个错误
提前谢谢。Laravel不支持复合主键(您可以尝试解决方案)。您只能在此处使用字符串:
protected $primaryKey = "cataloguecategory_id";
正如@Alexey发布的,您可以在模型中定义一个主键,并在控制器中传递两个主键,作为接收两个数组的updateOrCreate方法的两个参数中的第一个。奇怪,我来这里寻找支持多种语言的相同用例的答案。对于任何从谷歌搜索中偶然发现这个问题的人来说,覆盖
setKeysForSaveQuery
可以解决这个问题,如本文所述。