2013-02-20 2 views
1

기존 필드에서 계산 된 사용자 정의 값을 선택하려면 어떻게합니까?NOTORM 사용자 정의 mysql 함수

예를 들어, 나는 생년월일을 저장하고 있으며, mySql 함수에서 계산 한 나이를 선택하고 싶습니다.

$app->get("https://stackoverflow.com/users/:id", function ($id) use ($app, $db) { 
$user = $db->users()->where("users_id", $id); 
if ($data = $user->fetch()) { 
    $hobbies = array(); 
    foreach ($data->users_hobbies() as $hobbie) { // get all tags of $application 
     $hobbies[] = $hobbie["users_hobbies_name"]; // print the tag name 
    } 
    echo json_encode(array(
     "id" => $data["users_id"], 
     "login" => $data["users_login"], 
     "mail" => $data["users_mail"], 
     "date_of_birth" => $data["users_date_of_birth"], 
     "age" => ?? 
     "hobbies" => $hobbies 
     )); 
} else { 
    echo json_encode(array(
     "status" => false, 
     "message" => "User ID $id does not exist" 
     )); 
} 
}); 
+0

어디에서 값을 계산 하시겠습니까? 데이터베이스 또는 PHP 코드에서? – Odi

+0

데이터베이스에 있음 – Klaitos

답변

1

가장 간단한 방법은 (계산 age 열 포함) 당신이 필요로하는 모든 데이터를 define a MySQL view하는 것입니다 :

CREATE VIEW user_data AS 
SELECT users_id, 
     users_login, 
     users_mail, 
     users_date_of_birth, 
     DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(users_date_of_birth, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(users_date_of_birth, '00-%m-%d')) AS age 
FROM users; 

이 그럼 당신은 단순히보기를 조회 할 수 있습니다.

$app->get("https://stackoverflow.com/users/:id", function ($id) use ($app, $db) { 
$user = $db->user_data()->where("users_id", $id); 
if ($data = $user->fetch()) { 
    $hobbies = array(); 
    foreach ($data->users_hobbies() as $hobbie) { // get all tags of $application 
     $hobbies[] = $hobbie["users_hobbies_name"]; // print the tag name 
    } 
    echo json_encode(array(
     "id" => $data["users_id"], 
     "login" => $data["users_login"], 
     "mail" => $data["users_mail"], 
     "date_of_birth" => $data["users_date_of_birth"], 
     "age" => $data["age"] 
     "hobbies" => $hobbies 
     )); 
} else { 
    echo json_encode(array(
     "status" => false, 
     "message" => "User ID $id does not exist" 
     )); 
} 
});