用sql打造,
我正在研究laravel并想要更改连接的用户链接的表的值
我有3张桌子:
考试中的用户(id)外键(user_id)
和
验证中的考试(id)外键(exam_id)
如何更改仅连接用户的验证?
他自己这么做
我想我们需要
Auth::user()
DB::table('verifications')->where([
['confirmation', 'non'],
['modifier', 'oui'],
])->update(['confirmation' => "oui"]);
答案 0 :(得分:1)
您需要查询关系存在。但首先你必须在模型之间建立关系。
示例:
如果你需要更多的力量,你可以使用whereHas和orWhereHas方法来放置"其中"你的条件有疑问。这些方法允许您向关系约束添加自定义约束,例如检查注释的内容:
// Retrieve all posts with at least one comment containing words like foo%
$posts = App\Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();
更多:https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence
答案 1 :(得分:0)
如果您没有使用laravel关系,请使用连接。
DB::table('verifications')
->leftJoin('exams', 'verification.exam_id', '=', 'exams.id')
->leftJoin('users', 'exams.user_id', '=', 'user.id')
->where([
['verifications.confirmation', 'non'],
['verifications.modifier', 'oui'],
['users.id', Auth::user()->id]
])
->update(['verificationsconfirmation' => "oui"]);
答案 2 :(得分:0)
您似乎获得了考试ID,因此请在更新查询中添加:尝试如下:
DB::table('verifications')->with($exams)->->whereIn('exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);
更新答案: 你已经有了“$ exams”变量,所以你不需要再加入任何表:试试这个:
DB::table('verifications')->whereIn('verification.exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);