У меня есть модель продукта для многосайтового приложения.
В зависимости от домена (сайта) я хочу загрузить разные данные.
Например, вместо полей name
и description
в моей базе данных у меня есть posh_name, cheap_name, posh_description и cheap_description.
если я настрою что-то вроде этого:
class Product extends AppModel
{
var $virtualFields = array(
'name' => 'posh_name',
'description' => 'posh_description'
);
}
Тогда это всегда работает, независимо от того, доступен ли он непосредственно из модели или через ассоциацию.
Но мне нужно, чтобы виртуальные поля были разными в зависимости от домена. Итак, сначала я создал 2 набора:
var $poshVirtualFields = array(
'name' => 'posh_name',
'description' => 'posh_description'
);
var $cheapVirtualFields = array(
'name' => 'cheap_name',
'description' => 'cheap_description'
);
Итак, это мои 2 набора, но как мне назначить правильный набор на основе домена? У меня есть глобальная функция с именем isCheap()
, которая позволяет мне узнать, нахожусь ли я в нижнем домене или нет.
поэтому я попробовал это:
var $virtualFields = isCheap() ? $this->cheapVirtualFields : $this->poshVirtualFields;
Это дает мне ошибку. По-видимому, вы не можете назначать переменные в определении класса, как это.
Таким образом, вместо этого я поместил это в мою модель продукта:
function beforeFind($queryData)
{
$this->virtualFields = isCheap() ? $this->cheapVirtualFields : $this->poshVirtualFields;
return $queryData;
}
Это работает ТОЛЬКО при доступе к данным непосредственно из модели, НЕ работает при обращении к данным через сопоставление модели.
Должен быть способ заставить это работать правильно. Как?