2016-06-27 46 views
0
Post::whereReplyTo($request->input('reply_to')) 
     ->orderBy('updated_at', 'desc') 
     ->offset(Config::PAGE_SIZE * Config::MAX_PAGES) 
     ->take(1024) 
     ->delete(); 

我打算在職位數達到4時觸發此事務,以便在此案例中保留最多4個職位。雄辯地刪除比預期更多的記錄?

問題是,它會刪除所有的帖子,不僅這些,我打算刪除

我變得沮喪,爲什麼會出現這種情況? theres沒有錯誤,並且我爲sql查詢和沒有錯,選擇部分是正確的,我試過了,爲什麼它刪除所有帖子?

+2

什麼是'$請求 - >輸入(「REPLY_TO」)','配置的值:: PAGE_SIZE'和'Config :: MAX_PAGES'當你的DD()'/'var_dump()'他們?此外,Post :: whereReplyTo($ request-> input('reply_to')) - > orderBy('updated_at','desc') - > offset(Config :: PAGE_SIZE * Config :: MAX_PAGES)的輸出是什麼? >取(1024) - > toSql()'?在這種情況下, – Samsquanch

+0

負1。但這是我的應用程序中有效的值,頁面大小爲2,最大頁數爲2 – DeadlyBacon

+0

現在持有ill toSql – DeadlyBacon

回答

1

好吧,如果你的研究是正確的,你應該仍然可以採取兩項措施來做到這一點:

$delete_posts = Post::select('id')->whereReplyTo($request->input('reply_to')) 
     ->orderBy('updated_at', 'desc') 
     ->offset(Config::PAGE_SIZE * Config::MAX_PAGES) 
     ->take(1024) 
     ->get()->toArray(); 

Post::whereIn('id', $delete_posts)->delete(); 
+0

是非常多,感謝您的幫助,upvote +滴答你我的朋友 – DeadlyBacon

+0

實現這個我意識到,它應該是 - >獲得([「ID」]) – DeadlyBacon

+0

以外,它的好,謝謝 – DeadlyBacon

0

我覺得我到別的 我附加一個監聽器運行我刪除 結果後記錄的最近一次操作是:

delete from `a2_posts` where `reply_to` = ? order by `updated_at` desc limit 1024 

那麼,是我的偏移?我搜索了一下,我認爲你不能使用偏移+刪除。

智障?是的,非常非常。

這就是爲什麼我更喜歡蒙戈。

它更有意義。

來源:Mysql delete statement with limit

所以我想我會做的是查詢,然後循環,然後刪除。

SQL是純粹的天才,有時我向上帝發誓。