TP5.1 多表關聯查詢中實現搜尋功能
Jackie
Jackie 2020-06-16 22:43:38
0
4
1821

多表關聯搜尋功能的問題:

程式碼如下:

// 实现搜索功能 $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條件中,因為搜尋的是透過join加入的附表的字段,所以用附表的別名.字段的形式,如:p.name, s.name,這樣搜尋有問題,生成的SQL語句中,把兩個附表都過濾了,如下:

01.jpg

02.jpg

這樣的結果附加表沒了,所以欄位加了別名就不對了。

2、把搜尋條件哪裡,改成表名.欄位的形式,這樣搜尋主表的欄位是沒問題,但是搜尋附表還是有問題,這樣產生的SQL語句中,附表保留了,但是搜尋還是有問題,報錯如下:

04.jpg

03.jpg

#哪位大神幫忙看一下,這個要怎麼做呢? ? ?

Jackie
Jackie

全部回覆 (1)
WJ

看你這寫的是想在兩張關聯的表裡查數據吧,你用parma接受兩個值嗎?

你可以這樣,只接收一個值$where

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

然後用連結查詢,再加上分組」gruop",試試看!

不知道我說的對不對

  • 回覆 這樣也不行啊,還是提示: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
  • 回覆 product是完整表名嗎?
    WJ 作者 2020-06-18 11:28:59
  • 回覆 不是,我的表名前綴是:sr_
    Jackie 作者 2020-06-18 23:50:33
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!