TP5.1 Implementieren Sie die Suchfunktion in einer auf mehrere Tabellen bezogenen Abfrage
Jackie
Jackie 2020-06-16 22:43:38
0
4
1889

Probleme mit der mit mehreren Tabellen verknüpften Suchfunktion:

Der Code lautet wie folgt:

// 实现搜索功能
$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 Im obigen Code möchten wir die Suchfunktion implementieren, jedoch in der $map-Bedingung, da die Suche nach erfolgt Felder der angehängten Tabelle werden durch Join hinzugefügt. Verwenden Sie daher den Alias ​​der angehängten Tabelle, z. B. p.name, s.name. In der generierten SQL-Anweisung liegt ein Problem vor Angehängte Tabellen werden wie folgt gefiltert:

01.jpg

02.jpg

wie folgt: Infolgedessen ist die angehängte Tabelle verschwunden, sodass es falsch ist, den Feldern Aliase hinzuzufügen.

2. Ändern Sie die Suchbedingungen in die Form „Tabellenname.Feld“. Auf diese Weise ist es kein Problem, die Felder der Haupttabelle zu durchsuchen, es gibt jedoch immer noch ein Problem beim Durchsuchen der Anhangtabelle Auf diese Weise generiert, bleibt die Anhangtabelle erhalten, aber die Suche Es gibt immer noch ein Problem, der Fehler ist wie folgt:

04.jpg

03.jpg

Kann mir jemand helfen, wie das geht? ? ?

Jackie
Jackie

Antworte allen(1)
WJ

看你这写的是想在两张关联的表里查数据吧,你用parma接受两个值吗?

你可以这样,只接收一个值$where

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

然后用链接查询,再加上分组”gruop",试试看一下!

不知道我说的对不对

  • Antwort 这样也不行啊,还是提示:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'p.name' in 'where clause' 生成的SQL语句是这样: SELECT * FROM `sr_stock` WHERE ( `p`.`name` LIKE '%海伦凯勒%' OR `s`.`name` LIKE '%海伦凯勒%' )
    Jackie Autor 2020-06-17 20:35:14
  • Antwort product是完整表名吗?
    WJ Autor 2020-06-18 11:28:59
  • Antwort 不是,我的表名前缀是:sr_
    Jackie Autor 2020-06-18 23:50:33
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage