2017-02-14 99 views
3

我想用流暢的語法和雄辯來達到與下面的SQL查詢相同的結果。如何使用Eloquent fluent語法在加入後更新記錄?

UPDATE t 
SET t.completed = t.completed + 1 
FROM [groups] AS g 
INNER JOIN [quotas] AS t ON t.qid = g.qid 
WHERE g.iid = 12234 

groups表有一個稱爲group模型。此外,quotas表有一個模型,稱爲quota

什麼是加入兩個模型並增加quota.completed屬性的正確方法?

注意,每個模型都指向不同的數據庫。

+0

你說他們是在不同的數據庫,這些數據庫在同一個服務器實例上? – JRLambert

+0

是的,他們在同一臺服務器上,但不同的數據庫。我正在使用兩種不同的雄辯連接。每個模型都有一個名爲'protected $ connection ='connection name'的屬性;'定義連接。 – Jaylen

回答

0

你首先需要定義groupsquotas之間的關係:

public function quota(){ 
    return $this->hasOne('App\Quotas', 'qid', 'qid'); 
} 

那麼你的口才查詢將被:

Groups::where('iid', 12234)->with('quota')->first()->quota()->increment('completed'); 

這是假設where子句將只返回一個行。它返回多重,你會,而不是通過返回的收集需要循環:

Groups::where('iid', 12234)->with('quota')->get()->each(function($item, $key){ 
    $item->quota()->increment('completed'); 
}); 

Alternativly,您可以使用QueryBuilder的:

DB::connection('connForGroups')->table('groups') 
    ->join('dbname.quotas', 'groups.qid', '=', 'dbname.quotas.qid') 
    ->where('groups.iid', '=', 12234) 
    ->increment('dbname.quotas.completed'); 
+0

使用關係無法正常工作,但使用查詢生成器起作用。 – Jaylen

+0

@Jaylen請看我的更新,現在可以正常使用Eloquent – JRLambert