複数テーブル関連検索機能の問題:
コードは次のとおりです:
// 实现搜索功能 $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 ステートメントでは、次のように追加された両方のテーブルがフィルター処理されます:
結果として、接続されたテーブルは次のようになります。なくなったので、フィールドにエイリアスを追加するのは間違っています。
2. 検索条件をテーブル名.フィールドの形式に変更すると、主テーブルのフィールド検索は問題ありませんが、付録テーブルの検索には問題が残ります。この方法で生成された SQL ステートメントでは、付録の表は保持されますが、検索に問題が残ります。エラーは次のとおりです:
誰かこれを見るのを手伝ってくれませんか?どうすればいいですか? ? ?
WJ2020-06-17 16:40:17
関係する 2 つのテーブルのデータをチェックするという内容のようですが、2 つの値を受け入れるには parma を使用しますか?
これを行うには、値 $where
$map[] = ['p.name | s.name', 'like', '%' . $productName . '%'];
を 1 つだけ受け取り、リンク クエリとグループ "gruop" を使用します。試してみてください。
私の言ったことが正しいかどうかわかりません