Я надеюсь, что кто-то может пролить свет на эту проблему.Я прочитал тонны документов stackoverflow, документов тортов, работ, и я не могу решить эту проблему.У меня есть модельные отношения следующим образом:
- Лошадь принадлежит Продавцу
- Лошадь принадлежит Лоту
- У продавца есть Лошадь
- Лот имеетМную Продажу
- Лот имеет много средств для вывода
Затем я перечисляю все лоты и отображаю таблицу с лошадью, продавцом, номером лота и т. Д. И т. Д. Это работает нормально, фактически используя Paginator :: SortМетод, который я могу сортировать, может быть Vendor.name ASC или DESC, который говорит мне, что ассоциации верны.
Однако я не могу, однако, манипулировать результатами поиска, основываясь на совпадении с ЛЮБЫМ полем, принадлежащим Продавцу.Например, если в моих настройках paginate я делаю что-то вроде этого:
'conditions' => array('Vendor.name' => 'Simon')...
Я получаю сообщение об ошибке SQL, что столбец Vendor.name не существует, но если я удалю это ограничение условий и затем оценим SQL, это, безусловно, есть.
Следует также сказать, что я использую методы unbindModel () и bindModel () для создания на лету отношений hasOne для оптимальных издержек MySQL, и это не привело кпроблема, как это было раньше.
Вот первая строка, которую я получаю, когда я var_dump () разбиваю на страницы:
'Vendor' =>
array
'id' => string '2' (length=1)
'name' => string 'ALDORA STUD' (length=11)
'surname' => string '' (length=0)
'address' => string '' (length=0)
'tel' => string '' (length=0)
'fax' => string '' (length=0)
'email' => string '' (length=0)
'url' => string '' (length=0)
'comments' => string '' (length=0)
'created' => string '0000-00-00 00:00:00' (length=19)
'modified' => string '0000-00-00 00:00:00' (length=19)
'modified_by' => string '0' (length=1)
'Withdrawal' =>
array
'id' => null
'Sale' =>
array
'id' => null
'catalogue_id' => null
'lot_id' => null
'purchaser' => null
'amount' => null
'notes' => null
'date' => null
Я пропустил много строк, но выясно видно, что Vendor отправляется обратно как отношение hasOne к лоту, контроллеру, в котором я работаю.
Если это поможет, я использую этот код для отмены привязки и повторной привязки моделей:
$this->Lot->unbindModel(array(
'hasOne' => array('Horse'),
'hasMany' => array('Withdrawal', 'Update', 'Sale'),
'belongsTo' => array('Catalogue')
));
$this->Lot->Horse->unbindModel(array(
'belongsTo' => array('Vendor', 'Lot')
));
$this->Lot->Horse->Vendor->unbindModel(array(
'hasMany' => array('Horse')
));
$this->Lot->bindModel(array(
'hasOne' => array(
'Catalogue' => array(
'foreignKey' => false,
'conditions' => array('Catalogue.id = Lot.catalogue_id')
),
'Horse' => array(
'foreignKey' => false,
'conditions' => array('Horse.id = Lot.horse_id')
),
'Vendor' => array(
'foreignKey' => false,
'conditions' => array('Vendor.id = Horse.vendor_id'),
),
'Withdrawal' => array(
'foreignKey' => false,
'conditions' => array('Withdrawal.lot_id = Lot.id'),
'fields' => array('id')
),
'Sale' => array(
'foreignKey' => false,
'conditions' => array('Sale.lot_id = Lot.id')
)
)
));
$this->Lot->contain(array('Sale', 'Catalogue', 'Withdrawal', 'Horse', 'Vendor'));
Тогда мои вызовы на страницы будут выглядеть следующим образом:
$this->paginate = array(
'contain' => array('Sale', 'Catalogue', 'Withdrawal', 'Horse', 'Vendor'),
'conditions' => array('Vendor.name' => 'Somerset Stud'),
'maxLimit' => ($this->params['ext'] == 'csv' ? 1000 : 25),
'limit' => ($this->params['ext'] == 'csv' ? 1000 : 25),
);
И вот тогда я получаю сообщение об ошибке, что столбец Vendor.name не существует.Если бы кто-нибудь мог поделиться некоторыми советами и идеями, я был бы вечно благодарен.
С уважением, Саймон