TP5.1 多表关联查询中实现搜索功能
Jackie
Jackie 2020-06-16 22:43:38
0
4
1822

多表关联搜索功能的问题:

代码如下:

// 实现搜索功能
$productName = Request::param('productName');
$storeName = Request::param('storeName');

if ( !empty($productName) && empty($storeName) ) {
    $map[] = ['p.name', 'like', '%' . $productName . '%'];
} else if ( !empty($storeName) && empty($productName) ) {
    $map[] = ['s.name', 'like', '%' . $storeName . '%'];
} else if ( !empty($productName) && !empty($storeName) ) {
    $map[] = ['p.name', 'like', '%' . $productName . '%'];
    $map[] = ['s.name', 'like', '%' . $storeName . '%'];
}

// 定义分页参数
$limit = isset($_GET['limit']) ? $_GET['limit'] : 10;
$page = isset($_GET['page']) ? $_GET['page'] : 1;

$stockList = StockModel::where($map)
    -> alias('sk')
    -> leftJoin('product p', 'sk.product_id = p.id')
    -> join('store s', 'sk.store_id = s.id')
    -> where('sk.status', 1)
    -> order('sk.product_id', 'desc')
    -> field('sk.*, p.name as product_name, s.name as store_name')
    -> page($page, $limit)
    -> select();

1、以上代码中,想实现的搜索功能,但是$map条件中,因为搜索的是通过join加入的附表的字段,所以用附表的别名.字段的形式,如:p.name,   s.name,这样搜索有问题,生成的SQL语句中,把两个附表都过滤了,如下:

01.jpg

02.jpg

这样的结果附加表没了,所以字段加了别名就不对了。

2、把搜索条件哪里,改成表名.字段的形式,这样搜索主表的字段是没问题,但是搜索附表还是有问题,这样生成的SQL语句中,附表保留了,但是搜索还是有问题,报错如下:

04.jpg

03.jpg

哪位大神帮忙看一下,这个要怎么做呢???

Jackie
Jackie

全部回复(1)
WJ

看你这写的是想在两张关联的表里查数据吧,你用parma接受两个值吗?

你可以这样,只接收一个值$where

$map[] = ['p.name | s.name', 'like', '%' . $productName . '%'];

然后用链接查询,再加上分组”gruop",试试看一下!

不知道我说的对不对

  • 回复 这样也不行啊,还是提示:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'p.name' in 'where clause' 生成的SQL语句是这样: SELECT * FROM `sr_stock` WHERE ( `p`.`name` LIKE '%海伦凯勒%' OR `s`.`name` LIKE '%海伦凯勒%' )
    Jackie 作者 2020-06-17 20:35:14
  • 回复 product是完整表名吗?
    WJ 作者 2020-06-18 11:28:59
  • 回复 不是,我的表名前缀是:sr_
    Jackie 作者 2020-06-18 23:50:33
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!