私は CakePHP を使い始めたばかりで、いくつかの問題にぶつかりました。次のようなmysqlデータベース(ArtistとArtistSurname)の2つのテーブルを検索するためのこの検索機能があります。
class ArtistsController extends AppController {
public function search ($search) {
if ($search){
$artists = $this->Artist->find('all', array('conditions' => array("surname like '%$search%' AND Artist.id = ArtistSurname.artist_id OR firstname like '%$search%' AND Artist.id = ArtistSurname.artist_id"), 'limit' => 400, 'fields' => array('Artist.firstname', 'ArtistSurname.surname', 'Artist.dbirth', 'Artist.id')));
if (!$artists){
throw new NotFoundException(__('No search result.'));
}
$result = array();
foreach ($artists as $artist) {
$fetchedArtist = array('value' => $artist['ArtistSurname']['surname'] . " " . $artist['Artist']['firstname'], 'year' => $artist['Artist']['dbirth'], 'id' => $artist['Artist']['id']);
array_push($result, $fetchedArtist);
}
header("Content-Type: application/json");
echo json_encode($result);
$this->autoRender = false;
}
}
クエリの後、結果をオートコンプリート (typeahead.js) の新しい読み取り可能な配列に入れ、これを json としてエコーします。これは、クエリが姓のみを検索する場合ではなく、クエリが名を検索する限り正常に機能します。奇妙なことは、最初の名前が見つかったときに GET 要求から application/json のみを受け取ることです。それ以外の場合は、text/html で正しい結果が得られます。どうしてこれなの?