限时 5折! 详情
yii2 AR 同时查询多张表遇到问题
3 86 2017-09-06

问题1: hasMany()方法关联后可以使用findOne()和findAll()方法查询,但必须传入参数ID,而我要实现是同时查询出ID>N或两张表中所有数据.应该如何实现呢?
问题2:使用findBySql()无论是inner left right联接都只能查到左表数据,这是什么原因?
代码大致如下,如需提供更多,我可以增加,:
以下假设了两张表,数据库:PostgreSQL:

namespace app\models;
use Yii;
class a extends \yii\db\ActiveRecord
{
    public static function tableName()
    {
        return 'a';
    }

    public static function getDb()
    {
        return Yii::$app->get('db2');
    }

        public function getB()
    {
        return Resources::hasMany(B::className(), ['id' => 'aid']);
    }

}
  • 3 个回答
  • 无论我写什么方法或者SQL语句,getRawSql()返回的都是select * from a; 而且长不任何数据.

  • 以一个用户对应多个评论为例,其中用户的AR模型 UserModel,评论模型 CommentModel
    以用户为中心,假设需要获取用户信息以及评论信息
    UserModel需要这样配置

    public function getComment()
    {
        return $this->hasMany(Comment::className(), ['user_id' => 'user_id']);
    }

    我们可以这样获取

    $res = User::find()->joinWith('comment')->asArray()->all();

    打印的结果中,会包含两张表的所有字段信息,其中Comment列展示的关联的评论字段信息,我就不把结果贴出来了,当然这只是一种获取的方案,更详细的可以参考手册AR一节

  • return A::find()->with('B')->asArray()->all();
    return A::find()->joinWith('B')->asArray()->all();

    看文档这两法是一样的,但为什么不加asArray()就不会显示第二张表的信息?困惑!!!

登录 去赚佣金