我正在实施一个允许在用户之间记录交易的简单系统。为此,我有两个表transactions
和users
。
每个交易都在两个用户之间,并在from_user_id
和to_user_id
字段中记录从一个用户到另一个用户的流量,这些字段是users.id
的外键。
现在我想获取用户的所有交易(按时间顺序倒序)。我喜欢这样的事情:
class UsersTable extends Table {
public function initialize(array $config) {
...
$this->hasMany('Transactions', [
'foreignKey' => [
'OR' => [
'Users.id = Transactions.from_user_id',
'Users.id = Transactions.to_user_id'
]
],
'finder' => [
...
]
]);
...
}
}
当然,这不起作用(SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Transactions.Array' in 'where clause'
)并将foreignKey
设置为false
,并且queryBuilder
关联不允许使用自定义hasMany
。
对两个外键使用两个不同的关联(一个用于否定,一个用于正事务)然后合并两个,但是我不愿意走这条路。这是目前的做法:
$this->hasMany('NegativeTransactions', [
'className' => 'Transactions',
'foreignKey' => 'from_user_id'
]);
$this->hasMany('PositiveTransactions', [
'className' => 'Transactions',
'foreignKey' => 'to_user_id'
]);
有任何想法吗?