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