1

データベースからデータを取得するために使用しているクエリ関数があります。また、「created_at」フィールドを変更して次のように出力する関数もあります: Month Day YY'

クエリ関数は次のとおりです。

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" という名前のフィールドのヘルパー フォルダーにあります。関数は 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 ( ))

編集: 新しいエラー:

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 ( ))
4

1 に答える 1

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を使用できます。mysqlDATE_FORMAT

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

ドキュメントを確認してください。

于 2013-08-15T03:19:54.860 に答える