Может ли CakePHP вставлять данные в модель, используя несвязанный метод `$this-›Model-›query()`?

В CakePHP можно ли вставить в другую таблицу другую модель, не связанную с ней? Например, у меня есть модель Post. Могу ли я использовать $this->Post->query('insert into tablename(col1) values ​​(' . "$formname". ')');

Подскажите ответ......


person useranon    schedule 06.04.2009    source источник
comment
привет, теперь я получаю ответ, используя обе эти модели ..   -  person useranon    schedule 10.04.2009


Ответы (4)


Вы можете использовать 'uses' var, чтобы указать модели вы хотите использовать в своем контроллере:

var $uses = array('Recipe', 'User');

Это сообщит контроллеру (в данном случае RecipesController) использовать модель пользователя, а также модель по умолчанию (рецепт). Теперь вы можете обратиться к $this->User, как если бы вы были в UsersController.

Надеюсь, я правильно понял ваш вопрос.

Том

person Tom Wright    schedule 06.04.2009
comment
теперь я получаю ответ - person useranon; 10.04.2009

Создайте модель для другой таблицы, после чего вы сможете писать в нее в любое время, используя это:

<?php 
  App::import('Model', 'MyModel');
  $this->MyModel = new MyModel;
  $this->MyModel->save($MyData);
?>
person Ronny Vindenes    schedule 06.04.2009

Да, с помощью query() вы можете выполнять любые операторы SQL, поэтому также можно использовать этот метод для вставки данных, как в вашем примере.

Однако обычно используется один из других упомянутых подходов.

person dhofstet    schedule 06.04.2009

Используйте Model::query() только в случае крайней необходимости и другого выхода (т.е. в крайних случаях). Cake дает вам много инструментов, чтобы избежать этого.

Самым простым решением было бы использовать следующее:

$otherModel = ClassRegistry::init('OtherModel');
$otherModel->save(<your usual stuff here>);

ClassRegistry::init() возвращает экземпляр вашей модели (плохая идея делать это самостоятельно) и является простым способом доступа к любой модели в вашем приложении.

Если вы используете метод "var $uses", OtherModel будет загружаться всегда для этого контроллера, что может быть не тем, что вам нужно (это приводит к большому количеству ненужных накладных расходов).

person dr Hannibal Lecter    schedule 09.04.2009