TP5.1 Implémenter la fonction de recherche dans une requête associée à plusieurs tables
Jackie
Jackie 2020-06-16 22:43:38
0
4
1923

Problèmes avec la fonction de recherche associée multi-tables :

Le code est le suivant :

// 实现搜索功能
$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 Dans le code ci-dessus, nous souhaitons implémenter la fonction de recherche, mais dans la condition $map, car la recherche porte sur le. champs de la table attachée ajoutés via la jointure, utilisez donc l'alias de la table attachée. La forme du champ, telle que : p.name, s.name, il y a un problème avec la recherche dans l'instruction SQL générée. les tables attachées sont filtrées, comme suit :

01.jpg

02.jpg

comme ceci Par conséquent, la table attachée a disparu, il est donc erroné d'ajouter des alias aux champs.

2. Modifiez les conditions de recherche sous la forme nom de table.field De cette façon, il n'y a aucun problème pour rechercher les champs de la table principale, mais il y a toujours un problème dans la recherche dans la table annexe. généré de cette manière, le tableau en annexe est conservé, mais la recherche Il y a toujours un problème, l'erreur est la suivante :

04.jpg

03.jpg

Quelqu'un peut-il m'aider, comment faire ? ? ?

Jackie
Jackie

répondre à tous(1)
WJ

Il semble que ce que vous avez écrit soit de vérifier les données dans deux tables liées. Utilisez-vous parma pour accepter deux valeurs ?

Vous pouvez le faire, recevoir une seule valeur $where

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

puis utiliser la requête de lien, plus le groupe "gruop", essayez-le !

Je ne sais pas si ce que j'ai dit est vrai

  • répondre Cela ne fonctionne pas non plus, il affiche toujours : SQLSTATE[42S22] : Colonne introuvable : 1054 Colonne inconnue 'p.name' dans 'clause Where' L'instruction SQL générée est la suivante : SELECT * FROM `sr_stock` OÙ ( `p`.`name` LIKE '%Helen Keller%' OU `s`.`name` LIKE '%Helen Keller%' )
    Jackie auteur 2020-06-17 20:35:14
  • répondre Le produit est-il le nom complet de la table ?
    WJ auteur 2020-06-18 11:28:59
  • répondre Non, le préfixe de mon nom de table est : sr_
    Jackie auteur 2020-06-18 23:50:33
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal