PHP ActiveRecord, имеет много с настраиваемыми ключами - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующая схема таблицы (устаревшая система, поэтому я не могу ее изменить :-()

admins:
  admin_id
  ...

admin_auths:
  admin_id ( connects to admin_id )
  id ( connects to user_id )
  auth ( only care about when this is 'user' )
  ...

users:
  user_id ( connects to id )
  ...

Вот как мне удалось установить отношения, работающие для пользователей:

User.php

class User extends ActiveRecord\Model {
    static $has_many = [
        [ 'admin_auths', 
            'foreign_key' => 'id', # key in linked table
            'primary_key' => 'user_id',  # key in "parent" (this) table
        ],
        [ 'parents',
            'through' => 'admin_auths',
            'foreign_key' => 'id', # key in linked table
            'primary_key' => 'user_id',  # key in "parent" (this) table
            'class_name' => 'Admin'
        ]
    ];
}

AdminAuth.php

class AdminAuth extends ActiveRecord\Model {
    static $belongs_to = [
        [ 'admin' ],
        [ 'user',
            'foreign_key' => 'id', # key in linked (this) table
            'primary_key' => 'user_id',  # key in "parent" table
        ]
    ];
}

Если я позвоню $user->parents или $user->admin_auths, это прекрасно работает!

Однако я не могузаставить его работать в файле Admin.php:

class Admin extends ActiveRecord\Model implements JsonSerializable {
    // relationships
    static $has_many = [
        [ 'admin_auths' ],
        [ 'children',
            'through' => 'admin_auths',
            'class_name' => 'User'
        ]
    ];
    ...
}

Как показано выше.Это запускает следующий SQL:

SELECT `users`.* FROM `users` INNER JOIN `admin_auths` ON(`users`.user_id = `admin_auths`.user_id) WHERE `admin_id`=?

Проблема сэто то, что мне нужно, чтобы он присоединился ON(`users`.user_id = `admin_auths`.id) (нет столбца user_id)

Я попытался установить оба столбца foreign_key и primary_key. foreign_key изменяет раздел whereзапрос и primary_key не выполняется (просто SHOW COLUMNS на users и admin_auths).

TL; DR: Как настроить объединение в ассоциации PHP ActiveRecord has_many?

...