たとえば count という POST メソッドなら
$app->post('/count', function(\Slim\Http\Request $request, \Slim\Http\Response $response, $args) use ($app) {
$params = $request->getParams();
$data = json_decode($params["data"],true); // この $data がパラメータの連想配列にあたる、多分
/* 処理書く */
// 結果は $output という連想配列に入れて JSON で返す
// $output に結果を入れてから..
return $response->withJson($output);
});
ファイルをダウンロードさせる時のHTTPヘッダは Content-Disposition: attachment
になる
$app->get('/download_csv', function(\Slim\Http\Request $request, \Slim\Http\Response $response, $args) use ($app) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=example.csv');
ob_end_flush();
set_time_limit(0);
$out = fopen('php://output', 'w');
stream_filter_register("msLineEnding", "ms_line_ending_filter");
stream_filter_append($out, "msLineEnding");
/**
* 中身
* fputcsv という配列をCSVに書き込むメソッドをたぶんつかう
*/
fclose($out);
});
クエリを伸ばして最終的に->count();
で数えたり->find();
でデータを得たりする
観察された例
filter 関連
// 以下 sentence カラムに関して
// NULLをはじく
->filterBySentence(null,\Propel\Runtime\ActiveQuery\Criteria::ISNOTNULL)
// 空文字列をはじく
->filterBySentence("",\Propel\Runtime\ActiveQuery\Criteria::NOT_EQUAL);
// $keyword を含む
->filterBySentence("%".$keyword."%",\Propel\Runtime\ActiveQuery\Criteria::LIKE);
ソート関連
// 以下 id カラムに関して
// 昇順
->orderById(\Propel\Runtime\ActiveQuery\Criteria::ASC)
// 降順
->orderById(\Propel\Runtime\ActiveQuery\Criteria::DESC)
結合関連
そもそも JOIN の種類ってなんだっけってなったら https://qiita.com/naoki_mochizuki/items/3fda1ad6594c11d7b43c を見る
例えば HOGE テーブルの fuga_id カラム と FUGA テーブルの id カラムを LEFT_JOIN する場合は
->addJoin(Map\HogeTableMap::COL_FUGA_ID,
Map\FugaTableMap::COL_ID,
\Propel\Runtime\ActiveQuery\Criteria::LEFT_JOIN)
結合された FUGA テーブルの name カラムに fuga_name という名前を付けたくなったら
->withColumn(Map\FugaTableMap::COL_NAME, "fugaName")
SELF JOIN する場合は面倒で、(ベストプラクティスなのか分からないが)aliasをつけるとできる
->addAlias("FugaTable", Map\HogeTableMap::TABLE_NAME)
->addJoin(Map\HogeTableMap::COL_PARENT_ID,
Map\HogeTableMap::alias("FugaTable", Map\HogeTableMap::COL_ID),
\Propel\Runtime\ActiveQuery\Criteria::LEFT_JOIN)
>withColumn(Map\HogeTableMap::alias("FugaTable", Map\HogeTableMap::COL_NAME), "parentName");
LIMIT は取得するデータの限度数、OFFSET はスキップするデータの数を意味する。
例えば
SELECT * FROM tablename ORDER BY columnname LIMIT 5 OFFSET 5;
は columnname でソートしたあと、5件スキップしてその次の5件(すなわち6〜10件)を表示させる。
ページネーションはこのOFFSETを段階的に増やしていくことで実現される。