Составные ключевые отношения с топливной формой

Я пытаюсь заставить форму 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`);

1 ответ

Решение

На самом деле, я только что попробовал мой обнадеживающий, но недокументированный пример выше

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,
    ],
];

Удивлен сказать, что это на самом деле работает. Тем не менее, если у кого-то еще есть подобная проблема, я надеюсь, что они найдут этот ответ.

Другие вопросы по тегам