【问题标题】:Laravel Trying to delete MySQL row that was added lastLaravel 尝试删除最后添加的 MySQL 行
【发布时间】:2016-03-17 20:05:35
【问题描述】:

我正在尝试删除添加到具有特定用户 ID 的 MySQL 表中的最后一行。当我点击我的按钮时,我目前收到以下错误。

致命错误:在整数上调用成员函数 Where()

这是我在按钮所在的刀片文件中的代码

<div class="element1">
  {{ HTML::image('progress2/Icons/Meetings_Icon.png', 'alt', array('width' =>150)) }}
   <div class="text1">
 <form action="{{ route("progress") }}" method="post">
    <button class="styleHover styleButton"> + </button> </form>
    &nbsp; &nbsp; 5 &nbsp; &nbsp;
<form action="{{route("progressDeincrement") }}" method="post">
 <button class="styleHover styleButton"> - </button>
  </form>
 </div>

这是我的路由文件中的代码

Route:: post("progressDeincrement", [
  "as" => "progressDeincrement",
  "uses" => "tableController@delete"
]);

这是我控制器中的代码

public function delete() 
{
   $idForDelete = DB :: table("users_has_activities") -> max("pointsID") -> 
  Where("usersID", "=", "12");
  DB:: table("users_has_activities") -> Where("pointsID", "=",  $idForDelete) ->  
delete();
}

+ 按钮可以向 MySQL 表中添加一行,但是,删除一行对我来说是一个挑战。

【问题讨论】:

  • 尝试在调用时更改位置 .. 例如 ... table->where->max() 因为 max 可能类似于 delete 等 .. 并运行查询,所以必须至少是
  • 哇,感谢@kirkbeard 的所有回复,你的建议对我有用

标签: php mysql laravel


【解决方案1】:

您可以将其简化为单个数据库查询:

DB::table("users_has_activities")
    ->where("usersID", "=", "12")
    ->orderBy("pointsID", "DESC")
    ->take(1)
    ->delete();

这将为您提供如下 SQL 查询:

DELETE FROM users_has_activities
WHERE usersID = '12'
ORDER BY `pointsID` DESC
LIMIT 1;

使用Order By column DESCLIMIT 1 的组合可确保您获得可用的最高ID,从而模仿MAX() 的行为。

【讨论】:

  • 如果您想获取最后一行但他想按 id 删除最后一条记录,则使用限制是一件好事,所以最大值会很棒,因为他只需要获取 id 而不是整行数据。
  • ofc 你是对的,但问题是“我的脚本出现错误”而不是“如何优化我的查询或源”。这个答案告诉“使用这个复制和粘贴并且会起作用”,但不能让询问者理解哪里有问题。所以我觉得下一个问题可能是“我在查询中遇到错误”恕我直言。 =)
【解决方案2】:

试试这个并将first()ordering descending一起使用:

$idForDelete = DB :: table("users_has_activities") ->where("usersID", "=", 12)->orderBy('pointsID', 'DESC')->first();

【讨论】:

    【解决方案3】:

    我猜max("pointsID") 返回一个整数,而您正在尝试对整数而不是模型或集合使用Where 子句。

    也许你想用这个:

    $idForDelete = DB::table('users_has_activities')->where('usersID', '12')->max('pointsID');
    

    【讨论】:

      【解决方案4】:

      文档说max() 函数必须在最近的地方调用,因为它运行查询。

      查看聚合中的示例。

      用例是...表格 -> 过滤结果 -> 获取我想要的内容,例如获取一个、获取所有、删除、更新等。

      https://laravel.com/docs/5.1/queries#aggregates

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 2012-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多