2010-09-23 3 views
1

Я в ситуации, когда мне нужно получить данные из 6 моделей. Я не могу использовать ассоциации, поскольку они не связаны. Так что я должен использовать $uses или request action или любое другое решение

ответ

1

Я не согласен с Трэвисом. Гораздо лучше использовать loadModel, тогда вы можете быть уверены, что загружаете то, что вам нужно, когда вам это нужно. Кто скажет, что вы не будете расширять модель, чтобы включить методы, которые не требуют всех этих других моделей?

Вырезать и вставить - это большой импульс для работы программиста.

1

Вы можете попробовать $ использования, или, если вы хотите загрузить только модели, когда и где вы нуждаетесь в них, вы можете использовать loadModel (http://book.cakephp.org/view/845/loadModel) , LoadModel лучше, чем использование $, эффективность.

+2

Если вам нужно использовать их по всей геймпаде, я бы просто попробовать $ использует. В конце концов, мы используем торт для производительности программиста, а не для машины. Если это всего лишь один или два метода, попробуйте что-то еще, чтобы не перетащить другие методы. –

+0

Да, у вас есть точка. Я предполагал, что ему не нужны все 6 моделей для всего контроллера. –

2

Я бы рекомендовал использовать

ClassRegistry::init("model_name") 

или

loadModel("model_name") 

вместо этого.

E.g. Чтобы использовать User модель

$this->User = ClassRegistry::init('User'); 

Или

$this->loadModel('User'); 

Затем вы можете сделать некоторые запрос как

$this->User->find("all"); 
+0

может предоставить любую ссылку, чтобы узнать больше об этом, или вы только скажите мне, как я могу ее использовать. – aWebDeveloper

+0

@Web Developer, см. Мое обновление, плз. – Young

+0

на php5.x ClassRegistry :: init ('User') -> find ('all') также не требует создания новых объектов. – dogmatic69

1

В соответствии с рекомендациями других, вы должны использовать Controller::loadModel().

Дополнительно, я предлагаю вам сделать что-то вроде YourController::_loadMyMegaData(), которое загрузило бы все необходимые модели и установило ваши данные. Это позволит избежать загрузки этих моделей случайно и избавить вас от каких-либо блоков позже.

Кроме того, избегайте, по возможности, requestAction(), это не только уродливое, но и ударный удар. (Это имеет его использование, конечно, но это не происходит очень часто :))

0

Вы можете использовать следующее:

$this->loadModel('ModelName'); 
$this->ModelName->find(); 

Если вы извлекаете только одно поле, чем вы можете использовать виртуальные поля