[英]Translate raw query into Query Builder in CakePHP 3.x
這是我的查詢
INSERT INTO users_access_dynamic_views (dynamic_view_id, user_id, ordinal_ranking)
SELECT ?, u.user_id, COUNT(uav.id) + 1 from users_access_dynamic_views uav
RIGHT JOIN users_in_circles u ON uav.user_id = u.user_id
WHERE u.circle_id = ?
GROUP BY u.user_id
第一個?
應該用$viewId
類的PHP變量替換,而用$circleId
之類的第二個變量替換。
如何使用查詢生成器創建此文件? 我需要使用子查詢嗎?
是的,您可以對SELECT
部分使用子查詢,並將其傳遞給Query::values()
,例如:
$values = $connection
->newQuery()
->select([':viewId', 'u.user_id', 'COUNT(uav.id) + 1'])
->from(['uav' => 'users_access_dynamic_views'])
->rightJoin(['u' => 'users_in_circles'], ['uav.user_id = u.user_id'])
->where(['u.circle_id' => $circleId])
->group('u.user_id');
$query = $connection
->newQuery()
->insert(['dynamic_view_id', 'user_id', 'ordinal_ranking'])
->into('users_access_dynamic_views')
->values($values);
$query->bind(':viewId', $viewId, 'type');
注意select()
輸入的顯式綁定 ,在這里您不會像where()
那樣獲得自動綁定 ,因此您必須確保自己的安全。 有必要在外部查詢( $query
bind()
上使用bind()
,因為子查詢的綁定被拋棄了(不確定這是否是一個錯誤)。
產生的SQL:
INSERT INTO
users_access_dynamic_views (dynamic_view_id, user_id, ordinal_ranking)
SELECT
:viewId, u.user_id, COUNT(uav.id) + 1
FROM
users_access_dynamic_views uav
RIGHT JOIN
users_in_circles u ON uav.user_id = u.user_id
WHERE
u.circle_id = :c0
GROUP BY
u.user_id
如果值$viewId
是一個簡單的值,例如一個數值,那么您當然可以直接將其強制轉換而不使用綁定:
->select([(int)$viewId, 'u.user_id', 'COUNT(uav.id) + 1'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.