使用模型的CodeIgniter 4上的子查询



我正在使用CodeIgniter 4编程,我正在使用CodeIgniter的模型,因为我理解使用它是一个很好的实践。这是使用一个非常简单的表进行查询的好方法:

$this->myModel
->select('field')
->where('user_id', 1)
->findAll()

我甚至不需要写表名

然而,我不能做子查询,特别是,我需要从另一个表中读取user_id:

$this->myModel
->select('field')
->whereIn('user_id', SUBQUERY)
->findAll()

SUBQUERY isselect('id') from users where status='active'.

但是,这行不通:

$this->myModel
->select('field')
->whereIn('user_id', $this->userModel->select('id)->where('status', 'active')->findAll() )
->findAll()

是否有一种方法可以用CodeIgniter的模型来做,或者最好的方法是什么?我应该用查询生成器做子查询并将其与模型的使用混合吗?

谢谢!

代替:❌

->whereIn('user_id', $this->userModel->select('id')->where('status', 'active')->findAll() )

使用这个:✅

// Get User table.
$userTable = $this->userModel->getTable();
// ...
->whereIn('user_id',
static fn(CodeIgniterDatabaseBaseBuilder $builder) use ($userTable) => $builder->select('id')
->from($userTable)
->where('status', 'active')
)

$builder->whereIn()

在(' item ', ' item ') SQL查询中用AND连接生成一个WHERE字段如果合适:

你可以使用子查询代替数组的值:


附录

在您的特殊情况下,您可以选择使用$builder->join()

允许您编写查询的JOIN部分:

即:

$userTable = $this->userModel->getTable();
$myTable = $this->myModel->getTable();
$this->myModel
->select(["$myTable.field"])
->join($userTable, "$myTable.user_id = $userTable.id")
->where("$userTable.status", "active")
->get()->getResult();

最新更新