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