【问题标题】:Yii2 viaTable multiple variablesYii2 viaTable 多变量
【发布时间】:2016-08-12 22:17:56
【问题描述】:

我正在尝试在Yii2 中使用名为user_comment_user 的桌子上的viaTable 来查找UserComment 的数量。但是我似乎无法正确插入我的variables/query

目前我已经设置了两个queries,以检查它们是否(自己)获得了正确的结果,他们确实这样做了。

这两个queries 必须以某种方式将merged 合二为一:

public function findConversation($id)
{
    $query = $this->hasMany(UserComment::classname(), ['id'=>'user_comment_id'])
        ->viaTable('user_comment_user', ['sender_id'=>'id'], function ($query) use ($id) {
            $query->andWhere(['receiver_id'=>$id]);
        });
    $query2 = $this->hasMany(UserComment::classname(), ['id'=>'user_comment_id'])
        ->viaTable('user_comment_user', ['receiver_id'=>'id'], function ($query) use ($id) {
            $query->andWhere(['sender_id'=>$id]);
        });
        return $query;
}

【问题讨论】:

  • 你能解释一下预期的结果是什么吗?
  • @KostasMitsarakis 我需要获取所有 UserComment,其中 sender_id 为 $this->id 且 receiver_id 为 $id,反之亦然。按日期排序。

标签: php mysql yii2 has-many


【解决方案1】:

答案实际上比我想象的要简单得多:

    public function findConversation($id)
    {
        $query = UserComment::find();
        $query->leftJoin('user_comment_user',      'user_comment_user.user_comment_id=user_comment.id');
        $query->where(['receiver_id'=>$this->id, 'sender_id'=>$id]);
        $query->orWhere(['receiver_id'=>$id, 'sender_id'=>$this->id]);
        $query->orderBy(['created_at'=>SORT_DESC]);

        return $query;
    }

【讨论】:

  • 谢谢你,我也遇到了同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多