【问题标题】:hasMany with 'or' conditionhasMany 带有“或”条件
【发布时间】:2017-01-19 02:49:32
【问题描述】:

我有两个表:users 主键 idfriends 外键 user1user2 都与用户的 id 相关。

在用户模型中我有

public function getFriends() {
    return $this->hasMany(Friends::className(), ['user1' => 'id'])->inverseOf('user');
}

User::find()->with('friends')->all() 只查找那些 user1 匹配给定用户 ID 的朋友。

我应该如何更改getFriends() 以找到与用户ID匹配的user1 或user2的朋友?

【问题讨论】:

    标签: activerecord yii2


    【解决方案1】:

    考虑添加双向关系

    编辑:尽管 yii 开发人员建议它,但以下 #1 解决方案不起作用


    根据http://github.com/yiisoft/yii2/issues/851 这应该可以工作

    public function getFriends() {
        return $this->hasMany(Friends::className(), ['user1' => 'id'])
            ->viaTable('friends', array('user2' => 'id'), function ($q) {
                $q->where('user1=user2');
        });
    }
    

    编辑:

    找到了一些其他的解决方案,如果你还没有整理出来,请查看这个链接yii relation for multiple column foreign keys

    【讨论】:

    • 它会生成以下查询:SELECT * FROM friends WHERE (user1=user2) AND (user2=123)SELECT * FROM friends WHERE 0=1(123 是用户的 id)
    • 哦,是的,我觉得有点奇怪,你找到解决方案了吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多