加入后如何使用Eloquent流利语法更新记录?

How to use Eloquent fluent syntax to update records after joining?

我正在尝试使用 eloquent 的流畅语法来获得与以下 SQL 查询相同的结果。

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 table 有一个名为 group 的模型。此外,quotas table 有一个名为 quota

的模型

加入两个模型并递增 quota.completed 属性 的正确方法是什么?

注意,每个模型指向不同的数据库。

您首先需要定义 groupsquotas 之间的关系:

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

那么您的 Eloquent 查询将是:

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

这是假设 where 子句只会 return 一行。它是 return 的多个,您将需要遍历 returned:

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

或者,您可以使用 QueryBuilder:

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