join('co-6ren">
gpt4 book ai didi

php - Laravel 查询生成器 "select"奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:56 24 4
gpt4 key购买 nike

我对以下代码有疑问:

public function index() {
$qObj = \DB::table('customers as c')
->join('companies_has_customers as chc', 'chc.comhc_cus_id', '=', 'c.cus_id')
->join('cuscategory as cc', 'chc.comhc_cca_id', '=', 'cc.cca_id')
->join('transactions as t','t.trn_cus_id', '=','c.cus_id')
->select('t.trn_id');

$qObj->where('comhc_com_id', '=', $this->companyId);


$res = array(
'count' => $qObj->count(),
'items' => $qObj->get()
);

//print_r($this->showLastQuery());

return parent::prepareResponse($res, 200, 'customers');
}

这段代码产生以下 SQL 查询:

select * from `customers` as `c` 
inner join `companies_has_customers` as `chc` on `chc`.`comhc_cus_id` = `c`.`cus_id`
inner join `cuscategory` as `cc` on `chc`.`comhc_cca_id` = `cc`.`cca_id`
inner join `transactions` as `t` on `t`.`trn_cus_id` = `c`.`cus_id`
where comhc_com_id` = 1

问题:

为什么 QueryBuilder 生成 select *... 而不是上面语法中要求的 select t.trn_id...

最佳答案

改变顺序:

$res = array(
'items' => $qObj->get(),
'count' => $qObj->count()
);

它会起作用。

但更好的是,不要两次查询数据库,而是这样做:

$items = $qObj->get();

$res = array(
'items' => $items,
'count' => count($items)
);

您的代码的问题在于 count() 方法行为 - 它重置了 columns 属性(使用 select 设置),仅此而已。

关于php - Laravel 查询生成器 "select"奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com