Если я понимаю вопрос, то, что вы действительно ищете, это способ определения условия один раз , а не способ определения условия соединения.Поведение Containable
будет обрабатывать последнее, но не первое.С этой целью ...
Я не знаю ни одного способа использования значений переменных в вашем определении соединения.Так как это переменные класса, я подозреваю, что это невозможно сделать (отказ от ответственности: я не пробовал).У вас также есть дополнительная сложность при попытке получить доступ к тому, что обычно является значением сеанса (авторизованным пользователем) на уровне модели - что-то вроде MVC «нет-нет» в самом строгом смысле.
Что я сделалЧтобы удовлетворить аналогичные потребности, существует следующая комбинация:
Я использую мой AppController
для пересылки аутентифицированной информации о пользователе:
# AppController
# You may or may not want to use the conditional
if( !empty( $this->data ) ) {
$this->data['User'] = $this->Auth->user();
}
В вашей модели создайте обратный вызов beforeFind()
это изменит структуру запроса:
# Your model, e.g. TipVoting
# The data[] array will probably be keyed differently
public function beforeFind( $query ) {
if( array_key_exists( 'active', $this->_schema ) ) {
$conditions = !empty( $query['conditions'] ) ? $query['conditions'] : array();
if( !is_array( $conditions ) ) {
$conditions = array( $conditions );
}
if( !isset ( $conditions['user_id'] ) && !isset( $conditions[$this->alias . '.user_id'] ) ) {
$conditions[$this->alias . '.user_id'] = $this->data['User']['Administrator'];
}
$query['conditions'] = $conditions;
}
return $query;
}
Этот код является просто фрагментом кода, который удовлетворяет потребности аналогично вашему, поэтому он может не работать напрямую, но он должен дать вам представление очто возможно, и я думаю, что это может быть довольно близко к тому, что вы после.Просто имейте в виду, что вам, вероятно, придется внести некоторые изменения здесь и там.
Ключ заключается в том, что вы сохраняете «правильную» структуру MVC, явно перенаправляя информацию о сеансе в модель (вместо того, чтобы запрашиватьмодель для непосредственного доступа к нему) при настройке условия запроса на использование значения сеанса каждый раз, когда извлекаются записи из модели, если только условие, ориентированное на пользователя, уже не задействовано.
Это не идеально подходит для того, что выпосле, но это не должно занять слишком много времени, чтобы адаптировать его к вашим потребностям.