【问题标题】:put single row to variable and delete it at same time with one query将单行放入变量并使用一个查询同时删除它
【发布时间】:2019-08-16 18:36:24
【问题描述】:

我在 mysql 数据库中有一个 password_resets 表,我想获取单个原始数据并在 Lumen 中使用 DB 外观这样的一个查询将其删除:

$reset_row = DB::table('password_resets')->where('token', $request->token)->first()->delete();

但我有一个错误:

Call to undefined method stdClass::delete()

我试试这个代码:

  $reset_row = DB::table('password_resets')->where('token', $request->token)
  //do my work whith $reset_row->first();
  $reset_row->delete();

但我认为这种方式使用 2 查询来完成这项工作。

注意:我知道我不能删除,原因是first()方法)将它返回到数组)

有什么办法吗?

【问题讨论】:

  • 请发布您收到的确切错误。 (将其编辑到问题中,不要将其作为评论发布)
  • 问题已更新。抱歉我的错误。(我在第一个代码中有错误)
  • 据我所知,您应该尽可能多地使用模型,而不是使用 DB 外观
  • 是的。我想我应该迁移到模型以重置密码!

标签: laravel eloquent model lumen


【解决方案1】:

其实不用->first()。 Bcz 你的令牌是独一无二的。

如果你需要试试这个。

$reset_row = DB::table('password_resets')->where('token', $request->token)
    ->Limit(1)->delete();

我认为可以将“限制”与“删除”一起使用。

【讨论】:

  • 我用这种方式,我得到Trying to get property 'email' of non-object 错误。这种方式不要在reset_row变量中保存原始数据!!!!!!
【解决方案2】:

您可以简单地将 delete 方法链接到您的 Query Buider。 无需选择第一个,因为您要删除它们,而不是选择它们。

DB::table('password_resets')->where('token', $request->token)->delete();

它已经在 StackOverflow 的另一篇文章中得到了回答。

你也可以使用这个答案 laravel-delete-query-builder 也可以看deleting using the query builder的官方文档

【讨论】:

  • 我知道我可以通过这种方式获得它(!)但我想先将它存储在 reset_row 变量中!!!!!!
  • 冷静点,多加感叹号也没用。
【解决方案3】:

最后我想为重置密码创建模型并像这样使用它:

1.通过在this这样的模型上设置主键来设置令牌

2.使用find方法查找token (document for find method)

这样使用:

$reset=PasswordReset::find($token);
//work with $reset
$reset->delete()

注意::对于将主键设置为字符串 col,也请参见 link

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2013-03-15
    • 2022-12-01
    • 2014-01-02
    • 2019-05-21
    相关资源
    最近更新 更多