2013-02-18 3 views
0

Я новичок в cakephp. Я пытаюсь выполнить поиск в таблицах mysql. Я хочу использовать вложенный запрос.CakePhp mysql необработанная ошибка запроса

class TableController extends AppController{ 
. 
. 
public function show(){ 
    $this->set('discouns', $this->DiscounsController->query("SELECT * FROM discoun as Discoun WHERE gcil_id = 1"));//(SELECT id FROM gcils WHERE genre = 'Shoes' AND company_name = 'Adidas')")); 
} 

} Ошибка:

Error: Call to a member function query() on a non-object 

Я также попытался

public function show(){ 
    $this->DiscounsController->query("SELECT * FROM count as Count WHERE ctr_id = (SELECT id FROM ctrs WHERE genre = 'Shoes' AND company_name = 'Adidas')"); 
} 

Ошибка:

Error: Call to a member function query() on a non-object 

Файл: C: \ XAMPP \ HTDOCS \ cakephppro \ MyApp \ Controller \ CountsController.ph p

Пожалуйста, помогите. Я пробовал это последние несколько часов. :/

+0

В основном я хочу осуществить вложенный поиск, как вы можете увидеть в моем необработанном запросе. Мне легче использовать mysql-запросы, а не использовать запросы cakephp, но я не знаю, есть ли у вас какая-либо проблема. – user1984849

+0

Ошибка в части кода, в которой вы используете 'discouns'. Покажите эту часть. –

+0

Я понял, что ошибка и отредактированы соответствующим образом. – user1984849

ответ

1

Как уже упоминалось в комментариях, существует несколько проблем с вашим кодом.

Во-первых, вы пытаетесь вызвать метод query() на контроллер, в то время как вы должны исполнить его на модели, как это модели, которые обрабатывают запросы к базе данных и контроллер просто должен быть использован для вызова этих методы для получения данных и передачи их в представление.

Второе, что вы выполняете простой SQL-запрос raw вместо использования CakePHPs built in functions < - Обязательно прочитайте эту страницу полностью.

Теперь для вашей проблемы, до тех пор, как вы настроили ваш model relationships правильно и следовали правильные соглашения о присвоении имен, то это должно быть ваш код для запуска SQL запрос из этого контроллера:

public function show(){ 
    $this->set('discouns', $this->Discouns->find('all', array(
     'conditions' => array(
      'gcil_id' => 1, 
      'genre' => 'shoes', 
      'company_name' => 'Adidas' 
     ) 
    )); 
} 
+0

Yup .. Я исправил свой код. Но спасибо человеку .. :) Кроме того, у меня есть более сложные запросы для поиска. Я просто пытался это сделать проще. :) – user1984849

0

query() не Контроллер, но метод модели. Вот что вы пытаетесь сказать об ошибке (). Позвоните в функцию-член на не-объекте).

Так правильный вызов будет:

$this->Discount->query()

Но вы призываете это в TableController, так что если Table и Discount нет some type of relationship, вы не сможете назвать query().

Если Table имеет отношение, определенное вы будете в состоянии назвать:

$this->Table->Discount->query()

Пожалуйста, не то, что query() используется только при выполнении сложных запросов SQL в сценариях, где the standard methods (find, save, delete и т. д.) менее практичны.

0
$this->Counts->find('all',array(
    'conditions' => array(
    'ctrs.genre' => 'Shoes', 
    'ctrs.company_name' => 'Adidas' 
), 'recursive' => 1 
)); 

Вышеупомянутые таблицы называются счетчиками и ctrs.

Предполагается, что у вас установлена ​​модель, чтобы иметь какую-то связь между таблицей counts и таблицей ctrs. Трудно сказать в вашем коде точно, что вы за таблицы.

Книга CakePHP должна иметь все необходимые ответы. Одной из причин запуска CakePHP над обычным PHP является инструкция FIND. Как только вы настроите свои модели правильно, использование инструкции find должно быть очень простым.

http://book.cakephp.org/2.0/en/models.html

 Смежные вопросы

  • Нет связанных вопросов^_^