2013-08-14 1 views
1

У меня есть функция запроса, которую я использую, чтобы вытащить некоторые данные из моей базы данных. У меня также есть функция, которая изменяется по полю «created_at» печатать как так: Месяц День YY»Использование вспомогательной функции для изменения поля запроса в Laravel 4 с использованием DB: raw

Вот функция запроса:

public static function friend_activity_json($start = 0, $number_of_posts = 2) { 
     $friend_activity = DB::table('fanartists') 
         ->join('fans', 'fanartists.fan_id', '=', 'fans.id') 
         ->join('artists', 'fanartists.artist_id', '=', 'artists.id') 
         ->orderBy('fanartists.created_at', 'DESC') 
         ->select(DB::raw('StringEdit::getDate(fanartists.created_at) as created_at, fans.fbid, fans.first_name, fans.last_name, fans.gender, fans.city, fanartists.artist_id, artists.stage_name')) 
         ->get(); 

Функция в помощниках папку, в поданной под названием «StringEdit.php». Функция is getDate:

public static function getDate($date) { 
    $full_date = explode(" ", $date); 

    $date_pieces = explode("-", $full_date[0]); 

    $year = substr($date_pieces[0], -2); 

    $monthNum = $date_pieces[1]; 
    $monthName = date("F", mktime(0, 0, 0, $monthNum, 10)); 

    $final_date = $monthName ." ". $date_pieces[2] ." '".$year; 

    return $final_date; 

} 

Мне удалось вызвать эту функцию в другом месте, поэтому я знаю, что она работает. Как заставить его работать в этом контексте, чтобы изменить его в поле «created_at»? При запуске этого я получаю ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '::getDate(fanartists.created_at) as created_at, fans.fbid, fans.first_name, fans' at line 1 (SQL: select StringEdit::getDate(fanartists.created_at) as created_at, fans.fbid, fans.first_name, fans.last_name, fans.gender, fans.city, fanartists.artist_id, artists.stage_name from `fanartists` inner join `fans` on `fanartists`.`fan_id` = `fans`.`id` inner join `artists` on `fanartists`.`artist_id` = `artists`.`id` order by `fanartists`.`created_at` DESC) (Bindings: array ()) 

EDIT: Новая ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"%M %d %y) as created_at, fans.fbid, fans.first_name, fans.last_name, fans.gende' at line 1 (SQL: select DATE_FORMAT(fanartists.created_at, "%M %d %y) as created_at, fans.fbid, fans.first_name, fans.last_name, fans.gender, fans.city, fanartists.artist_id, artists.stage_name from `fanartists` inner join `fans` on `fanartists`.`fan_id` = `fans`.`id` inner join `artists` on `fanartists`.`artist_id` = `artists`.`id` order by `fanartists`.`created_at` DESC) (Bindings: array ()) 

ответ

0

Это не будет работать, как, как вы использовали его в запросе здесь

DB::raw('StringEdit::getDate(fanartists.created_at) as created_at, fans.fbid, fans.first_name, fans.last_name, fans.gender, fans.city, fanartists.artist_id, artists.stage_name') 

Здесь , getDate функция обрабатывается как mysql функция и недействительна, в любом случае вы можете использовать mysql родной DATE_FORMAT, а не

DATE_FORMAT(fanartists.created_at, "%M %d %y") as created_at 

Check the documentation.

+0

с помощью этого я получил другую ошибку синтаксиса (добавлен на мой вопрос в качестве редактирования) – user1072337

+0

@ user1072337, там была опечатка, я пропустил закрытие '" ''% после y'. –

+1

Удивительно, это решило проблему. – user1072337