Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL/Laravel - Mengapa kueri saya mengembalikan koleksi kosong?

Itu sesuatu yang agak "rumit". Kueri yang Anda jalankan di phpmyadmin memang benar. Namun, Laravel menggunakan where() dan on() berbeda.

Gunakan where() dengan nilai dan on() saat bekerja dengan kolom.

$times = Time::join(\DB::raw('(SELECT `ath_id`, `stroke_id`, MIN(time) AS time FROM times GROUP BY ath_id, stroke_id) b'), function($join) {
                 $join->on('times.ath_id', '=', 'b.ath_id')
                      ->on('times.stroke_id', '=', 'b.stroke_id')
                      ->on('times.time', '=', 'b.time');
             })
             ->where('times.ath_id', '=', $id)
             ->orderBy('times.stroke_id', 'ASC')
             ->orderBy('times.date', 'DESC');

Dokumen:https://laravel.com/docs/5.4/queries , bagian (CTRL+F):Gabungan lanjutan

Agar lebih jelas:

$join->on('times.ath_id', '=', 'b.auth_id')->where('times.stroke_id', '=','b.stroke_id');

menghasilkan:

JOIN on `times`.`ath_id` = `b`.`auth_id` WHERE `times`.`stroke_id` = 'b.stroke_id' -- AS STRING

Kebingungan muncul ketika toSql() mengembalikan kueri Anda dan Anda berasumsi bahwa Laravel tahu bahwa:

['b.stroke_id', 'b.time', '4298584']

dua binding pertama adalah kolom. Tapi where() berpikir bahwa mereka hanya string.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu PANJANG () di MySQL?

  2. Bagaimana cara kerja kueri basis data PHP/MySQL?

  3. Backtrace dari query SQL ke kode aplikasi?

  4. Gabungkan 2 Array dan Jumlahkan Nilainya (Kunci Numerik)

  5. SQL - Cara menyusun ulang kueri pemilihan yang menggunakan batasan batasan