Heim  >  Fragen und Antworten  >  Hauptteil

TP5.1 Implementieren Sie die Suchfunktion in einer auf mehrere Tabellen bezogenen Abfrage

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? ? ?

JackieJackie1609 Tage vor1879

Antworte allen(4)Ich werde antworten

  • WJ

    WJ2020-06-17 16:40:17

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

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

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

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

    不知道我说的对不对

    Antwort
    0
  • Jackie

    这样也不行啊,还是提示: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 · 2020-06-17 20:35:14
    WJ

    product是完整表名吗?

    WJ · 2020-06-18 11:28:59
    Jackie

    不是,我的表名前缀是:sr_

    Jackie · 2020-06-18 23:50:33
  • StornierenAntwort