Php Laravel:更新用户的最早令牌

Php Laravel:更新用户的最早令牌,php,laravel,lumen,Php,Laravel,Lumen,我目前正在使用Lumen创建API。例如,我有两个表users和users\u-token,它们具有相应的模型User和UsersToken: 应用程序\用户: 您能回顾一下打印吗 $latestUserToken = $user->tokens->oldest('updated_at')->first(); 我认为这是用户和用户令牌之间的混合,因此不是一个需要更新的明确实例 您还可以查看用户令牌表结构(主键)。雄辩不支持组合主键 如果您想达到这个目标,您应该覆盖两个方法并覆

我目前正在使用Lumen创建API。例如,我有两个表
users
users\u-token
,它们具有相应的模型
User
UsersToken

应用程序\用户:


您能回顾一下打印吗

$latestUserToken = $user->tokens->oldest('updated_at')->first();
我认为这是用户和用户令牌之间的混合,因此不是一个需要更新的明确实例


您还可以查看用户令牌表结构(主键)。

雄辩不支持组合主键

如果您想达到这个目标,您应该覆盖两个方法并覆盖
$primary\u key
属性

在App\UsersToken中:

类UsersToken扩展模型 { /** *与模型关联的表。 * *@var字符串 */ 受保护的$table='users_token'; /** *质量可分配的属性。 * *@var数组 */ 受保护的$fillable=[ “用户id”, “代币”, ]; 受保护的$primaryKey=[ “用户id”, “代币”, ]; /** *设置保存更新查询的键。 * *@param\illighte\Database\elount\Builder$query *@return\illumb\Database\elount\Builder */ 受保护的函数setKeysForSaveQuery(\Illumb\Database\Eloquent\Builder$query) { $keys=$this->getKeyName(); 如果(!是_数组($keys)){ 返回父项::setKeysForSaveQuery($query); } foreach($keys作为$keyName){ $query->where($keyName,'=',$this->getKeyForSaveQuery($keyName)); } 返回$query; } /** *获取保存查询的主键值。 * *@param mixed$keyName *@返回混合 */ 受保护函数getKeyForSaveQuery($keyName=null) { 如果(空===$keyName){ $keyName=$this->getKeyName(); } 返回$this->original[$keyName]??$this->getAttribute($keyName); } }
我尝试了许多不同的方法在我的工作区中生成错误。我唯一可以生成它的时间是在
users\u token
表中没有
id
列。而且在
users\u token
表中似乎没有
id

如果未明确定义,Eloquent将查找字段
id
,作为任何表的主键。您可以使用
protected$primaryKey='token'在模型上定义主键字段名。我假设您希望字段
标记
作为主键

但我建议不要将
令牌
用作主令牌。使用普通的旧自动递增长整数作为主键,并使用
令牌
作为唯一键。这将防止任何不必要的重复条目


代码的其余部分看起来还可以。

请您也提供UserToken模型好吗?@omarjayed Yeah当然可以,给您;)有趣的问题实际上,我没有定义<代码> UsersToken < /COD>的主键,因为它是字段“代码> USER ID ID/CODE >和<代码>令牌< /代码>的组合。我发现了这一点,或者简单地考虑添加主键。是的,使用一个简单的主键,如字段<代码>令牌< /代码>工作得很好。如果你用一个例子来写这个答案,我会验证你的答案谢谢你的提示,我想我已经在这里读到了类似的东西。但是我想我会继续使用单个主键是的,
users\u-token
表中没有
id
列,因为最初我想要一个来自
token
user\u-id
的复合主键。我想我会听从你的建议,只添加默认的
id
列。谢谢你的帮助;)很高兴帮助……:)
$latestUserToken = $user->tokens->oldest('updated_at')->first();