tp5查询主表存在子表多条记录中的最新一条

我想做的是查询主表存在于另一个子表的最新一条记录,$this->yuyue是主表,$this->model是子表有主表的多条记录,查询倒是查出来了,但是我想加个搜索条件就不行了,总提示不存在y_uid这个字段,我也很是纳闷不知道怎么回事,哪位帮忙看下,谢谢了!。


```php
if (!empty(!$param['y_uid'])) {
                $where['y_uid'] = $param['y_uid'];
            }

if (!empty($param['searchStart'] && !empty($param['searchEnd']))) {
                $where['y_sf_addtime'] = [['egt', strtotime($param['searchStart'] . "00:00:00")], ['elt', strtotime($param['searchEnd'] . "23:59:59")], 'and'];
            }
            
            $huifangs = $this->model
                ->order('y_sf_addtime', 'desc')
                ->limit(10000) //不加有可能获取的不是最新的一条
                ->buildSql();
                    
            $selectResult = $this->yuyue->alias('a')
                    ->join([$huifangs => 'b'], 'b.yyid = a.id', 'LEFT')
                    ->where($where)
                    ->where(['b.yyid' => ['neq','null'], 'b.y_tag' => ['in','1,2,3']])
                    ->field('a.id,a.y_name,a.y_sex,a.y_age,a.y_did,a.y_province,a.y_city,a.y_mzh,b.y_sf_addtime,b.y_sfnrbc,b.id as bid,b.y_hzsq,b.yyid,b.y_nextsfsj,b.y_uid')
                    ->group('a.id')
                    ->limit($offset, $limit)
                    ->order('b.y_sf_addtime desc')
                    ->select();

```

根据您提供的代码,问题可能出在以下几个地方:

$param['y_uid'] 字段不存在:请确保 $param['y_uid'] 字段的存在和正确性。您可以打印 $param 数组,检查是否包含了 y_uid 字段。

$this->yuyue 模型中不存在 y_uid 字段:您可以检查 $this->yuyue 模型中是否包含了 y_uid 字段。如果没有该字段,请确认字段名是否拼写正确或是您可能需要修改为正确的字段名。

$where 数组的键名 'y_uid' 错误:请确保 y_uid 是 $this->yuyue 模型中的字段名,与数据库表结构一致。如果不一致,请将键名修改为正确的字段名。

【以下回答由 GPT 生成】

看起来你的代码中有一个问题,就是子表的别名 b 没有正确指定与 y_uid 的关联。你可以尝试修改下面这行代码:

$selectResult = $this->yuyue->alias('a')
    ->join([$huifangs => 'b'], 'b.yyid = a.id', 'LEFT')

修改为:

$selectResult = $this->yuyue->alias('a')
    ->join([$huifangs => 'b'], 'b.yyid = a.id', 'LEFT')
    ->join([$huifangs => 'c'], 'c.y_uid = a.y_uid', 'LEFT')

这样,你在 where 条件中就可以使用 c.y_uid 了。

修改后的代码如下所示:

if (!empty($param['y_uid'])) {
    $where['c.y_uid'] = $param['y_uid'];
}

$huifangs = $this->model
    ->order('y_sf_addtime', 'desc')
    ->limit(10000)
    ->buildSql();

$selectResult = $this->yuyue->alias('a')
    ->join([$huifangs => 'b'], 'b.yyid = a.id', 'LEFT')
    ->join([$huifangs => 'c'], 'c.y_uid = a.y_uid', 'LEFT')
    ->where($where)
    ->where(['b.yyid' => ['neq', 'null'], 'b.y_tag' => ['in', '1,2,3']])
    ->field('a.id,a.y_name,a.y_sex,a.y_age,a.y_did,a.y_province,a.y_city,a.y_mzh,b.y_sf_addtime,b.y_sfnrbc,b.id as bid,b.y_hzsq,b.yyid,b.y_nextsfsj,b.y_uid')
    ->group('a.id')
    ->limit($offset, $limit)
    ->order('b.y_sf_addtime desc')
    ->select();

希望这对你有所帮助!如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^