Yii2 AR查询joinWith使用, left join on

时间: 2017-04-07  分类: Yii2  收藏
yii2中使用left join时,用query的方法看着更舒服,改起来也方便,如下,其中表别名字段别名等设置起来方便简单
$query = (new \yii\db\Query())
        ->select('a.id as id,title,create_time,modify_time,username,name')
        ->from('article AS a')
        ->leftJoin('user AS u','u.id = a.user_id')
        ->leftJoin('category AS c','c.id = a.category_id')
        ->where(['c.id'=>5])
        ->limit(4)
        ->orderBy('id DESC')
        ->All();
如果数据表有前辍的话, 可以使用UserJoke::tableName()获取完整表名,
注意AS前面的空格

->from(User::tableName().' AS a')
->leftJoin(User::tableName().' AS j','a.jid = j.id')



AR查询时,改的时候真没上面的方便
控制器部分
$_list = $model::find();
$_list->select(['f.id','f.dateline','n.nid','n.title']);
$_list->from(Favorite::tableName() . ' as f');
$_list->where(['f.userid'=>5]);
$_list->joinWith('newsTitle as n' , false, 'LEFT JOIN'); //注意这里的newsTitle和第2个参数false
$_list->orderBy('f.id DESC')->limit(5)
->asArray()
->all();
其中的newsTitle正是模型中的关联关系方法, 第二个参数flase目的是不再为每个关联执行一条查询语句, 仅一条left join的查询,等同于上面query的方式

模型部分
//getNewsTitle与控制器中joinWith的第一个参数对应
//'nid' => 'nid' 前面的nid为News表的nid,后面的nid为Favorite表的nid
public function getNewsTitle() {
    return $this->hasOne(News::className(), ['nid' => 'nid']);
}
分享到:

评论

昵 称: