Моя многоуровневая сага MVCGrid / MVCForm / MVCGrid продолжается ....
Я использую вложенные MVCGrids с кнопками расширения, которые вызывают MVCForms для выполнения различных операций с данными. ВСЕ таблицы MySQL в этом процессе имеют элемент данных «id», который является первичным ключом для каждой таблицы. Каждая таблица mySQL также имеет точку на своего родителя, когда это необходимо, используя соглашение об именовании _id. Все внешние ключи были настроены в MySQL для работы таким же образом.
Модель для родителя выглядит так:
класс Model_uidcontrol extends Model_Table {
public $entity_code='uidcontrol';
public $table_alias='uc';
function init(){
parent::init();
Модель для ребенка выглядит так:
Класс Model_uiddetails extends Model_Table {
public $entity_code='uiddetails';
public $table_alias='ud';
function init(){
parent::init();
У каждой модели есть собственный идентификатор и указатель на родителя.
Столбец расширения в MVCGrid (родительский) вызывает эту дочернюю функцию:
$um=$this->add('MVCForm');
$um->setModel('uiddetails')
->loadData(($_GET['uidcontrol_id']));
Я пробовал это в детской модели:
$this->addRelatedEntity('uc','uidcontrol','uidcontrol_ID');
и это также:
$this->addField('uidcontrol_id')
->refModel('Model_uidcontrol')
->caption('System Info')
->visible(true);
Я пробовал каждую технику в отдельности и вместе, чтобы получить записи о детях, которые должны быть согласованы с соответствующим родителем.
debug () показывает это
где
ud.id = '121'
ud.uidcontrol_id = '121'
Хорошо, я понимаю $ GET и как он работает и как это относится к dsql - по крайней мере, я так думаю.
Что я не могу понять, так это сказать MVCForm, что нужно использовать "ud.uidcontrol_id = '121"
через $ GET при сборке dsql для загрузки данных и не использовать 'ud.id'
В приведенном выше примере есть родительская запись "uidcontrol" с этим идентификатором. Я установил, что идентификатор дочерней записи равен 121, чтобы посмотреть, будет ли она извлекать данные и отображать их в форме. ОК, данные отображаются как надо.
Когда я пытаюсь использовать этого родителя, у которого 'id' = 10, debug () производит это
ud.id = '10'
ud.uidcontrol_id = '10'
и данные не возвращаются. Существует запись uidcontrol с id = 10, но dsql также пытается сопоставить с ud.id = 10.
Я могу рассказать больше о том, что я работаю, чтобы уточнить, что я пытаюсь сделать, если это поможет.
В идеале я хотел бы сказать MVCForm: "Эй! Не используйте элемент данных 'id' при сборке dsql, используйте тот, который я предоставляю вместо этого. Проблема в том, что я не могу понять, как это сделать ... но я многому научился по пути. Мне кажется, что я, вероятно, "слишком много думаю" здесь.
Спасибо за любые предложения!
Понедельник, 6 февраля Примечания:
var_dump ($ _ GET); говорит:
'id' => строка '10' (length = 2) <=== uidcontrol.id
'uidcontrol_id' => строка '10' (длина = 2) <=== uidcontrol.id </p>
Я пишу это:
$um->setModel('uiddetails')
->addCondition('uidcontrol_id',($_GET['id']))
->loadData(($_GET['id']));
И отладка SQL показывает, что это строится:
, где
ud.id = '10'
ud.uidcontrol_id = '10'
Проблема в том, что я хочу ТОЛЬКО "ud.uidcontrol_id = '10'". Таблица uiddetails имеет собственный идентификатор 125 и значение uidcontrol_id 10. В результате запрос не возвращает запись.