使用模型对CodeIgniter 4进行子查询

nwlqm0z1  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(103)

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

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

我甚至不用写table的名字。
但是,我不能执行子查询,特别是,我需要从另一个表读取user_id

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

子查询为select('id') from users where status='active'
然而,这并不奏效:

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

有没有一种方法可以用CodeIgniter的模型来实现它?或者最好的方法是什么?我应该用Query Builder来完成子查询,并将其与模型的使用混合起来吗?
谢谢!

gxwragnw

gxwragnw1#

代替:

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

使用这个:

->whereIn('user_id',
    static fn(\CodeIgniter\Database\BaseBuilder $builder) => $builder->select('id')
        ->from($this->userModel->getTable())
        ->where('status', 'active')
)

第一个月
生成使用AND连接的WHERE字段IN('item ',' item ')SQL查询(如果适用):
可以使用子查询代替值数组:

附录

在您的特定情况下,也可以使用$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();

相关问题