问一个关于YII2关联查询的问题。。。 [ 2.0 版本 ]
我想要查询这样一条语句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();
共 3 个回答
-
你已經大致完成了阿, 大概長這樣你印看看吧
$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 裡調用了
-
zhoupenghui 回答于 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();
我没有测试,你试一下
我的丶关键词
最后登录:2017-05-09
在线时长:11小时40分
- 粉丝1
- 金钱83
- 威望0
- 积分193