Определение внешнего ключа в cakePhp: Ленивая загрузка? - PullRequest
0 голосов
/ 16 сентября 2011

Я начинаю использовать cakePhp, чтобы создать небольшой сайт. Я определил отношения между таблицами, и я хочу знать: будут ли эти связанные данные загружаться каждый раз? Потому что в зависимости от текущего представления некоторые связанные таблицы никогда не будут использоваться, и на самом деле они запрашиваются каждый раз.

Это огромная цена за то, что она нам приносит, нет?

Так как же иметь такие отношения и активировать их только тогда, когда они нам нужны? Какая-то ленивая загрузка, которая загружает связанную таблицу, только если она мне нужна?

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Попробуйте сначала использовать правильный уровень recursive, после этого используйте unBindModel, как указано @riky.Не делайте глупостей, например, используйте recursive уровень 2 и после этого снимайте привязку со всех нежелательных моделей.

1 голос
/ 16 сентября 2011

will those related data loaded every time? Данные: нет. Модели: да, родственные модели будут инициализированы.

Because depending of the current view, some linked table will never be used, and actually they are queried every time. Используйте вмещаемое или recursive.

It's a big cost for what it brings to us, no? Ну, может быть, если у вас много отношений. В остальном это просто удобнее.

So how to have this kind of relationship and activate it only when we need it? Some kind of lazy loading which loads the related table only if I need it? Я не думаю, что ленивая загрузка доступна. Вы всегда можете привязать модель на лету. Но опять же, я бы сказал, что вы беспокоитесь о крошечных оптимизациях. Загрузка этих моделей обычно занимает несколько миллисекунд на каждый запрос.

1 голос
/ 16 сентября 2011

Cake Facilates, чтобы отменить привязку вашей необязательной модели перед тем, как запустить ваш запрос.

$this->unbindModel(array($relation => $model));

$ отношение - это ваши отношения с другой моделью.

$ модель - Название модели.

eg: $this->Library->unbindModel(array('belongsTo' => array('Membership'),),false);

http://bakery.cakephp.org/articles/cornernote/2006/12/10/unbindall

...