Я пытаюсь заставить форму FuelPHP использовать составной ключ при использовании related()
метод.
У меня есть настройка БД с двумя таблицами, и я хотел бы связать их на основе их составных ключей.
Например, я обычно использовал бы такое отношение в моей модели orm:
protected static $_has_one = [
'message_flag' => [
'key_from' => 'object_id',
'model_to' => '\ModelClass',
'key_to' => 'object_id',
'cascade_save' => false,
'cascade_delete' => false,
],
];
Но вместо того, чтобы использовать key_from => 'id
а также key_to => 'object_id
Я хотел бы присоединиться к ним по их составному ключу, который может выглядеть примерно так:
protected static $_has_one = [
'message_flag' => [
'key_from' => ['object_id', 'other_key'],
'model_to' => '\ModelClass',
'key_to' => ['object_id', 'other_key',
'cascade_save' => false,
'cascade_delete' => false,
],
];
Чтобы уточнить, верхний пример, рекомендованный в документации к FuelPHP, создает запрос, который выглядит следующим образом:
SELECT `t0`.`object_id` AS `t0_c0`, `t0`.`other_key` AS `t0_c1` FROM `myTable` AS `t0` LEFT JOIN `otherTable` AS `t1` ON (`t0`.`object_id` = `t1`.`object_id`);
Но запрос, который я хотел бы построить с помощью ORM, выглядел бы так:
SELECT `t0`.`object_id` AS `t0_c0`, `t0`.`other_key` AS `t0_c1` FROM `myTable` AS `t0` LEFT JOIN `otherTable` AS `t1` ON (`t0`.`object_id` = `t1`.`object_id` AND `t0`.`other_key` = `t1`.`other_key`);
На самом деле, я только что попробовал мой обнадеживающий, но недокументированный пример выше
protected static $_has_one = [
'message_flag' => [
'key_from' => ['object_id', 'other_key'],
'model_to' => '\ModelClass',
'key_to' => ['object_id', 'other_key',
'cascade_save' => false,
'cascade_delete' => false,
],
];
Удивлен сказать, что это на самом деле работает. Тем не менее, если у кого-то еще есть подобная проблема, я надеюсь, что они найдут этот ответ.
Других решений пока нет …