Laravel 5 SQLSTATE[42S22]:未找到列:1054未知列'';在';其中第'条;

Laravel 5 SQLSTATE[42S22]:未找到列:1054未知列'';在';其中第'条;,laravel-5,eloquent,composite-key,polymorphic-relationship,Laravel 5,Eloquent,Composite Key,Polymorphic Relationship,我一直在犯错误 “SQLSTATE[42S22]:未找到列:其中的1054未知列”“”“” 第“”条 使用sql输出: update`contactables`set`updated`=2019-08-16 20:35:56,`active`=0,其中``为空,`key`u ID`=235852 我试图在多态模型上使用雄辩的firstOrNew/firstOrCreate方法。我已经尝试过这方面的各种变体: $record1=可联系::firstOrNew( [ '可联系的\u ID'=>$l

我一直在犯错误

“SQLSTATE[42S22]:未找到列:其中的1054未知列”“”“” 第“”条

使用sql输出:

update`contactables`set`updated`=2019-08-16 20:35:56,`active`=0,其中``为空,`key`u ID`=235852
我试图在多态模型上使用雄辩的firstOrNew/firstOrCreate方法。我已经尝试过这方面的各种变体:

$record1=可联系::firstOrNew(
[
'可联系的\u ID'=>$location\u ID,
'user\u ID'=>$user\u ID,
“可联系的_类型”=>位置::类,
]);
$record=Contactable::find($record1->key\u ID);
$record->fill(
[
“活动”=>$active,
]);
$record->save();
$primaryKey='key_ID';
$guarded=[];
$fillable=[
“用户ID”,
“使用本地联系人信息”,
“可联系的_ID”,
“可接触式”,
"主动",,
"旗帜",,
“打印并保存”,
“营销”,
];
这似乎只有在尝试更新我实际更改了某些内容的记录时才会发生。创建记录似乎很好,在我不做任何更改的地方进行更新似乎很有效。我完全不知道下一步该怎么办

我已经看过了这些(以及十几个没有真正相关的):


感谢您的帮助,或新问题

经过相当多的环顾,我终于找到了解决这个问题的办法。我忘记了这个表有一个复合键,这是这个问题的根源

我将其包含在自定义透视模型中,以覆盖“setKeysForSaveQuery”的laravel默认值:

class Contactable extends MorphPivot { ... protected function setKeysForSaveQuery(Builder $query) { $query //Put appropriate values for keys here: ->where('contactable_type', '=', $this->contactable_type) ->where('contactable_ID', '=', $this->contactable_ID) ->where('user_ID', '=', $this->user_ID); return $query; } ... } 类可接触的扩展数据透视{ ... 受保护的函数setKeysForSaveQuery(生成器$query){ $query //在此处为键输入适当的值: ->其中('contactable_type','=',$this->contactable_type) ->其中('contactable_ID','=',$this->contactable_ID) ->其中('user\u ID','=',$this->user\u ID); 返回$query; } ... } 它像一个符咒一样工作,并修复了导致雄辩地创建
…的问题,其中''为null且'key_ID'=235852
查询

我还引用了以下内容,这些内容为我的解决方案提供了信息,但大多数情况下并没有解决我在自定义多态关系上过于复杂的复合键问题。我希望这条路能帮助别人


我在Laravel 5.4中使用了此修复,与Kevin Foster之前的答案非常相似,取自

在所讨论的表的Laravel模型中插入此项-插入复合键的列名以代替column1和column2

解决了我的问题-感谢以前的贡献者

/**
 * Set the keys for a save update query.
 * This is a fix for tables with composite keys
 * TODO: Investigate this later on
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
protected function setKeysForSaveQuery(Builder $query)
{
    $query
        //Put appropriate values for your keys here:
        ->where('column1', '=', $this->column1)
        ->where('column2', '=', $this->column2);

    return $query;
}
您还需要包括:

use \Illuminate\Database\Eloquent\Builder;

..
active
=0其中```..您不应该在where后面提到列名吗?您有空的“在中给出列名…”
columnName
为空,
key\u ID
=235852是来自
$record1->save()的错误
或者您是否也在保存
$record
?@Praveen/@Payam-->抱歉,我知道问题在于引号中应该有一个列名,我不明白的是,当我匹配key\u ID主键上的记录时,为什么eloquent会在查询中放入where语句。经过周末的思考,也许我需要用laravel Elotent打开一个bug@Jonas-->我将修复问题中的代码。我尝试了一百种排列,但在我的问题中加入了错误的一种。如果这个问题的答案对你有帮助,请道歉,请考虑投票帮助那些帮助你的部分。谢谢你的贡献!