Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩更新或创建复合密钥_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 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

我试图将对记录的更改保存在一个数据库表中,该表具有由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]:未找到列:“where子句”中的1054未知列“id”

我已经尝试了几种组合和方法,但是我不知道是什么导致了这个错误


提前谢谢。

Laravel不支持复合主键(您可以尝试解决方案)。您只能在此处使用字符串:

protected $primaryKey = "cataloguecategory_id";

正如@Alexey发布的,您可以在模型中定义一个主键,并在控制器中传递两个主键,作为接收两个数组的updateOrCreate方法的两个参数中的第一个。奇怪,我来这里寻找支持多种语言的相同用例的答案。对于任何从谷歌搜索中偶然发现这个问题的人来说,覆盖
setKeysForSaveQuery
可以解决这个问题,如本文所述。