Maison > Questions et réponses > le corps du texte
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 :
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 :
Quelqu'un peut-il m'aider, comment faire ? ? ?
WJ2020-06-17 16:40:17
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