programing

선택하지 않은 쿼리에 대한 사용자 지정 함수 케이크 쿼리 작성기

powerit 2023. 6. 17. 09:44
반응형

선택하지 않은 쿼리에 대한 사용자 지정 함수 케이크 쿼리 작성기

저는 mariadb를 사용하고 싶습니다.INET_ATON()Cakephp Query Builder를 사용하여 삽입 쿼리에 있습니다.

INSERT INTO failed_logins 
SET email = 'example@test.com', ip_address = INET_ATON('192.168.0.1'), sent_email = 1;

그러면 데이터를 검색하고 싶습니다.INET_NTOA()선택된 쿼리에서

SELECT id, email, INET_NTOA(ip_address) AS ip_address, sent_email FROM failed_logins;

케이크 쿼리 작성기에서 삽입하고 선택하는 기능을 사용하려면 어떻게 해야 합니까?
Using SQL functions(SQL 함수 사용)을 확인했지만 문제를 해결할 수 없었습니다.

많은 시간을 뛰어다닌 후에 저는 그것을 성공적으로 할 수 있었습니다.

$this->connection->newQuery()->into('failed_logins');
$newIp = $query->func()->inet_aton([$ip]);
$query->insert(['email', 'ip_address', 'sent_email'])->values(
    ['email' => $email, 'ip_address' => $newIp, 'sent_email' => $sentEmail]
)->execute()->lastInsertId();

꽤 복잡하고 IDE와 PHPStan은 "inet_aton" 함수가 정의되지 않았다는 경고를 보여줍니다.
나는 만약에. 만약에.values()배열 나는 그냥 그것을 할 수 있었습니다.['ip_address' => "INET_ATON($ip)"]편집: 댓글을 보는 것은 좋은 생각이 아닙니다.하지만 안전하게 유지되는 유사한 것이 가능합니다.->bind()(아래 코드 조각).

편집: 제거됨'literal'코드 스니펫에서 (고맙습니다 @ndm)

IDE 및 분석 도구 - 친숙한 솔루션

$this->connection->newQuery()->into('failed_logins');

$query->insert(
    [
        'email',
        'ip_address',
        'sent_email',
    ]
)->values(
    [
        'email' => $email,
        'ip_address' => $query->newExpr("INET_ATON(:ip)"),
        'sent_email' => $sentEmail,
    ]
)->bind(':ip', $ip, 'string')->execute()->lastInsertId();

언급URL : https://stackoverflow.com/questions/66470692/custom-functions-for-non-select-queries-cake-query-builder

반응형