>  Q&A  >  본문

TP5.1 다중 테이블 관련 쿼리에서 검색 기능 구현

다중 테이블 연관 검색 기능의 문제점:

코드는 다음과 같습니다.

// 实现搜索功能
$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 조건에서 수행됩니다. 첨부된 테이블의 필드가 조인을 통해 추가되었으므로 첨부된 테이블의 별칭을 사용하십시오. p.name, s.name과 같은 필드의 형식은 생성된 SQL 문에 모두 문제가 있습니다. 첨부된 테이블은 다음과 같이 필터링됩니다.

01.jpg

결과적으로 첨부된 테이블이 없어져 필드에 별칭을 추가하는 것은 잘못되었습니다. 02.jpg

2. 검색 조건을 테이블명.필드 형식으로 변경합니다. 이렇게 하면 기본 테이블의 필드를 검색하는 데는 문제가 없지만, SQL 문에서는 여전히 문제가 있습니다. 이렇게 생성하면 부록 테이블은 유지되지만 검색에는 여전히 문제가 있습니다. 오류는 다음과 같습니다.

04.jpg

03.jpg

누구든지 도와줄 수 있나요? 어떻게 해야 하나요? ? ?

JackieJackie1559일 전1824

모든 응답(4)나는 대답할 것이다

  • WJ

    WJ2020-06-17 16:40:17

    두 개의 관련 테이블에서 데이터를 확인하기 위해 작성한 것 같습니다. parma를 사용하여 두 개의 값을 허용합니까?

    이 작업을 수행할 수 있습니다. $where

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

    하나의 값만 받은 다음 링크 쿼리와 "gruop" 그룹을 사용하여 시도해 보세요!

    내 말이 맞는지 모르겠어요

    회신하다
    0
  • Jackie

    이 방법도 작동하지 않으며 여전히 다음 메시지가 표시됩니다. SQLSTATE[42S22]: Column notfound: 1054 Unknown columns 'p.name' in 'where Clause' 생성된 SQL 문은 다음과 같습니다. SELECT * FROM `sr_stock` WHERE ( `p`.`name` LIKE '%Helen Keller%' OR `s`.`name` LIKE '%Helen Keller%' )

    Jackie · 2020-06-17 20:35:14
    WJ

    product가 전체 테이블 이름인가요?

    WJ · 2020-06-18 11:28:59
    Jackie

    아니요, 내 테이블 이름 접두사는 sr_입니다.

    Jackie · 2020-06-18 23:50:33
  • 취소회신하다