На самом деле у меня есть 1 запрос, но я не могу преобразовать его в формат запроса CakePHP.
$result = "select * from esl_userresults where esl_userresults.esl_songID = esl_lyrics.id and esl_lyrics.song_name like '%".$esl_keyword."%'" ;
Когда я конвертирую этот запрос в CakePHP, он дает ошибку, например:
esl_userresults.esl_songID unknown column.
Вы можете легко запускать прямые sql-запросы на торте, используя, например: $ this-> Picture-> query («SELECT * FROM pictures LIMIT 2;»); ( руководство для торта )
Или попробуйте что-нибудь подобное:
$result = Esl_Userresults->find('all' , array('conditions' => array( "Esl_Userresults.esl_songID" => "Esl_Lyrics.id", "Esl_Lyrics.song_name LIKE" => '%'.$esl_keyword.'%'), 'recursive' => 1) );
… что вы правильно связали модели Esl_Userresults и Esl_Lyrics.
Используйте Containable поведение, а не рекурсивное. Это даст вам контроль над отдельным полевым уровнем. Используя его сейчас, на ранней стадии, он станет второй натурой позже.
Если вы запутались в создании условий, выстройте их вне вызова метода.
Старайтесь избегать использования двойных кавычек, за исключением тех случаев, когда вам нужно включать экранированные или анализируемые данные – они медленнее.
$conditions = array( 'EslUserresult.esl_songID' => 'EslLyric.id', 'EslLyric.song_name LIKE' => '%'.$esl_keyword.'%' ) $this->EslUserresult->contain('EslLyric.text'); $result = $this->EslUserresult->find('all',array('conditions'=>$conditions));
Вы можете использовать AppModel
query()
AppModel
для запуска SQL-запроса.
ex: $this->ModelName->query('SELECT * FROM
table ');
это вернет массив выбранных записей. Вы можете передать простой запрос, а также сложный запрос соединения.