Kohana 3 - Query Builder 0 arasındaki satırları verir

2 Cevap php

Phpmyadmin çalıştırdığınızda beklendiği gibi aşağıdaki sorgu bir satır döndürür.

SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = '1'
AND units.location_id = locations.id
LIMIT 0 , 30 

Ama Kohana 3 bunu yapmaya çalıştığınızda:

$unit = DB::select('units.*', 'locations.*')
->from('units', 'locations')
->where('units.id', '=', $id)->and_where('units.location_id', '=', 'locations.id')
->execute()->as_array();
var_dump($unit);

Bu yazdırır

array (0) {}

Ben yanlış ne yapıyorum?

2 Cevap

Ben hemen o sorgu oluşturucu ile neyin yanlış olduğunu söyleyemem, ancak, hata ayıklama amacıyla bu ödeme.

Db zincirindeki execute() çağırdıktan sonra, bu deneyin.

echo Database::instance()->last_query;

Bu son sorgu yapılan düz SQL gösterecektir. Bu sorgu oluşturucu üretilen ne bakarak değer olacaktır, ve nasıl bu phpmyadmin kullandığınız SQL farklıdır.

Bütün bunlardan başarısız olursa, sadece düz bir sorgu yöntemleri kullanın.

$query = "SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = :id
AND units.location_id = locations.id
LIMIT 0 , 30 ";

$unit = Db::query(Database::SELECT, $query)
          ->bind(':id', (int) $id)
          ->execute()
          ->as_array();

Bunu fark edeceksiniz last_query (where kısmında) iade için çağrı:

WHERE units.location_id = 'locations.id' karşılaştırma için geçirilen değer dolayısıyla bir dize, boş bir sonuç kümesi olarak kote ediliyor. Bu size yardımcı olabilir: http://kohanaframework.org/guide/api/DB#expr

Lütfen ölümcül hata olarak, çift kontrol (başka bir değişkenin bir referans kopyası değil) açıkça $ id geçiyoruz emin olmak için, ben herhangi bir kaynak sağlayarak değil düşünen tüm düşünebildiğim bu.