TP5.1 Laksanakan fungsi carian dalam pertanyaan berkaitan berbilang jadual
Jackie
Jackie 2020-06-16 22:43:38
0
4
1919

Masalah dengan fungsi carian berkaitan berbilang jadual:

Kod adalah seperti berikut:

// 实现搜索功能
$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 Dalam kod di atas, kami ingin melaksanakan fungsi carian, tetapi dalam keadaan $map, kerana carian adalah untuk medan jadual yang dilampirkan ditambah melalui gabungan, jadi gunakan alias jadual yang dilampirkan Bentuk medan, seperti: p.name, s.name, terdapat masalah dengan carian Dalam pernyataan SQL yang dihasilkan jadual yang dilampirkan ditapis, seperti berikut:

01.jpg

02.jpg

seperti ini Akibatnya, jadual yang dilampirkan hilang, jadi adalah salah untuk menambah alias pada medan.

2. dijana dengan cara ini, jadual lampiran dikekalkan, tetapi carian Masih terdapat masalah, ralat adalah seperti berikut:

04.jpg

03.jpg

Bolehkah sesiapa membantu saya, bagaimana untuk melakukan ini? ? ?

Jackie
Jackie

membalas semua(1)
WJ

Nampaknya apa yang anda tulis adalah untuk menyemak data dalam dua jadual yang berkaitan Adakah anda menggunakan parma untuk menerima dua nilai?

Anda boleh melakukan ini, terima hanya satu nilai $where

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

dan kemudian gunakan pertanyaan pautan, tambah kumpulan "gruop", cubalah!

Saya tidak tahu sama ada apa yang saya katakan itu betul

  • balas Ini juga tidak berfungsi, ia masih menggesa: SQLSTATE[42S22]: Lajur tidak ditemui: 1054 Lajur 'p.name' tidak diketahui dalam 'fasal tempat' Pernyataan SQL yang dihasilkan adalah seperti berikut: PILIH * DARI `sr_stock` DI MANA ( `p`.`name` SUKA '%Helen Keller%' ATAU `s`.`name` SUKA '%Helen Keller%' )
    Jackie pengarang 2020-06-17 20:35:14
  • balas Adakah produk nama jadual lengkap?
    WJ pengarang 2020-06-18 11:28:59
  • balas Tidak, awalan nama jadual saya ialah: sr_
    Jackie pengarang 2020-06-18 23:50:33
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan