![](/img/trans.png)
[英]Write a sql statement to query one table based on columns in other tables?
[英]Execute a SQL query/statement conditionally based on table data
您正在尋找的是使用UPDATE語句和WHERE語句來設置您需要的內容,這就是您的操作方法。 通過laravel解析命令,它將相應更新。
UPDATE TableName Set Tickets=Tickets+1 WHERE USERNAME='JonDoe' AND Money > 200
使用Eloquent:
\App\User::where('username','JonDoe')->where('Money','>',200)->increment('Tickets');
我不是Laravel的專家,但是和其他許多框架一樣,它應該有一個ORM系統(對象關系映射: https ://en.wikipedia.org/wiki/Object-relational_mapping),這個系統可以幫助你“說話”以面向對象的方式使用數據庫(使用getFirstByPrimaryKey($ primaryKey)等方法)。
這就是說,我認為當你已經知道如何手動完成時,那種系統會更好。
在你提議的情況下,你必須首先考慮你需要什么,然后想想實現它的更好方法是什么。
你需要什么:
如果該用戶具有更多或等於某個數量,則為一個用戶插入故障單。
讓我想一想,也許你會在成功創建門票之后從金錢領域中取出這筆數量,對吧?
所以我認為我們正在賣票,正常的步驟應該是:
檢查用戶是否已登錄。 如果已記錄,我們可能在會話或類似系統中具有用戶ID。 如果可能的話,在索引數字字段中搜索要好得多。
獲得user_id后,如果該用戶ID有足夠的資金用於此操作,我們會更新該行:
//pseudo code $userId = 12; $cost = 200; $query = "update ticketstable set tickets=tickets+1, money=money-$cost where id='$userId' and money >= $cost"; $result = $db->query($query); if($result){ //row with id = $userId has been updated }else{ //There's not a row with $userId, or that row's money was less than $cost }
在處理貨幣操作時考慮到你應該將所有相關查詢作為一個交易(數據庫中的事務argot意味着一起執行幾個sql語句,如果一些失敗,所有其他的都被還原,以避免不一致)。
如果您在兩個查詢中划分我的提案:
1)檢查id = x的用戶是否有錢> = $ cost;
2)更新資金 - = $ cost;
您可以在用戶或其他自動化流程從步驟1和步驟2之間的同一行中獲取一些資金的情況下找到,然后以負資金結束,並允許您不應該進行操作。
Laravel有一個流暢的查詢構建器,您可以使用(或多或少)如下所示:
$affectedRows = DB::table('TableName')
->where("Username", "Jondoe")
->where("Money",">",200)
->increment("Tickets");
您還可以使用$affectedRows
來檢查是否有任何更新。
編輯:
如果您有一個用戶模型(例如,名為User
),那么您可以使用相同的語法,但使用Eloquent。
例:
User::where("Username", "Jondoe")
->where("Money",">",200)
->increment("Tickets");
Eloquent是Laravel的ORM(對象關系模型),它提供了關系數據庫和PHP對象(即MVC框架的模型部分)之間的映射。 它不是一個查詢構建器本身,但它確實使用流暢的后台來構建查詢。
試試這個命令
UPDATE TableName Set Tickets=Tickets+1 WHERE USERNAME='JonDoe' AND Money > 200
希望這將解決您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.