cari

Rumah  >  Soal Jawab  >  teks badan

TP5.1 Laksanakan fungsi carian dalam pertanyaan berkaitan berbilang jadual

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

JackieJackie1620 hari yang lalu1890

membalas semua(4)saya akan balas

  • WJ

    WJ2020-06-17 16:40:17

    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
    0
  • Jackie

    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 · 2020-06-17 20:35:14
    WJ

    Adakah produk nama jadual lengkap?

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

    Tidak, awalan nama jadual saya ialah: sr_

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