ホームページ  >  に質問  >  本文

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

誰かこれを見るのを手伝ってくれませんか?どうすればいいですか? ? ?

JackieJackie1609日前1877

全員に返信(4)返信します

  • WJ

    WJ2020-06-17 16:40:17

    関係する 2 つのテーブルのデータをチェックするという内容のようですが、2 つの値を受け入れるには parma を使用しますか?

    これを行うには、値 $where

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

    を 1 つだけ受け取り、リンク クエリとグループ "gruop" を使用します。試してみてください。

    私の言ったことが正しいかどうかわかりません

    返事
    0
  • Jackie

    これも機能せず、依然として次のプロンプトが表示されます: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'p.name' in 'where quote' 生成される 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
  • キャンセル返事