2016-05-20 11:02:37 5196次浏览 3条回答 1 悬赏 20 金钱

我想要查询这样一条语句select u.* from ht_user_comm u left join ht_diary a on u.cid=a.id where a.id=1 order by u.count_praise desc;
在代码中应该怎么写的,最好在我这段代码基本上修改。。谢谢大神了。。代码如下:
$data = UserComm::find()->with('diary')->leftJoin('diary','user_comm.cid=diary.id' )->where(['diary.id' => $id]) ->orderBy(['user_comm.count_praise' => SORT_DESC])->asArray()->all();

  • 回答于 2016-05-20 14:10 举报

    可以试试用活动记录来做,关联两者,设置getUser()方法;
    在控制器获取数据:

    $model = Ht_diary::findOne(1);
    $data = $model->joinWith('user')->orderby('count_praise desc')->asArray()->all();
    
  • 回答于 2016-05-20 14:20 举报

    你已經大致完成了阿, 大概長這樣你印看看吧

    $data = \app\models\UserComm::find()
    ->leftJoin('ht_diary','user_comm.cid=ht_diary.id' )
    ->where(['ht_diary.id' => 1])
    ->orderBy(['user_comm.count_praise' => SORT_DESC])
    ->createCommand()->Rawsql;
    
    echo $data;
    

    model

    class UserComm extends \yii\db\ActiveRecord
    {
        public static function tableName()
        {
           return 'ht_user_comm ';
        }
    }
    

    或者 可以參照 activeRecord 的方法
    http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#junction-table
    http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#joining-with-relations

    這樣 left join 條件就可以寫在 model 裡調用了

  • 回答于 2016-06-12 10:44 举报

    可以这样:
    先在表ht_user_comm 的模型中增加:

    public function getHtDiary()
    {
        return $this->hasMany(HtDiary::className(), ['id' => 'cid']);  // hasMany可能为hasOne
    }
    

    ,然后:
    $data = UserComm::find()->with([
    'htDiary'=>function(\yii\db\ActiveQuery $query) use $id{

    $query->where[
    

    'htDiary.id' => $id'
    ]},
    ])->orderBy([
    'user_comm.count_praise' => SORT_DESC
    ])->asArray()->all();
    我没有测试,你试一下

您需要登录后才可以回答。登录 | 立即注册
我的丶关键词
助理

我的丶关键词

注册时间:2016-04-25
最后登录:2017-05-09
在线时长:11小时40分
  • 粉丝1
  • 金钱83
  • 威望0
  • 积分193

热门问题