pdox icon indicating copy to clipboard operation
pdox copied to clipboard

fetchAll(PDO::FETCH_COLUMN) gibi getlAll()

Open ozgurg opened this issue 4 years ago • 4 comments

Merhaba. Sadece tek sütundaki verileri dizi olarak alabilmek istiyorum. Bunu nasıl yapabilirim? PDO'nun ...->fetchAll(PDO::FETCH_COLUMN) fonksiyonu gibi sonuç döndürmesini istiyorum.

Örnek olarak şu şekilde bir tablo olsun:

id title
1 title1
2 title2
3 title3

Ben title sütunundaki verileri şu şekilde istiyorum:

$array = ["title1", "title2", "title3"];

Şu anda ...->select("title")->getAll() kullandığımda "array of objects" döndürüyor.

Eğer şu an mümkün değilse belki ...->getCol() gibi bir fonksiyon eklenerek bu sağlanabilir.

ozgurg avatar May 31 '21 10:05 ozgurg

Merhabalar, ->getAll yerine, ->fetchAll() kullanabilirsiniz. İlk parametre olarak da istediğiniz fetch type'ı belirtebilirsiniz.

izniburak avatar Jun 01 '21 08:06 izniburak

Merhabalar, ->getAll yerine, ->fetchAll() kullanabilirsiniz. İlk parametre olarak da istediğiniz fetch type'ı belirtebilirsiniz.

getAll()'u, sadece ->fetchAll() ile değiştirmeyi denemiştim. Diğer kısımlara dokunmadan sadece bunu değiştirince hiç sonuç dönmüyor. PHP 8.0.6 üzerinde kütüphanenin 1.5.0 sürümünü kullanıyorum.

Test tablosu

id title
1 Renk
2 Beden
CREATE TABLE `attrs` (
  `id` int UNSIGNED NOT NULL,
  `title` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

select('title')->getAll() örneği:

Kod:

$db = new \Buki\Pdox($config);

$records = $db->table('attrs')
		->select('title')
		->getAll();

echo '<pre>';
var_dump($records);
echo '</pre>';

Çıktı:

array(2) {
  [0]=>
  object(stdClass)#5 (1) {
    ["title"]=>
    string(4) "Renk"
  }
  [1]=>
  object(stdClass)#6 (1) {
    ["title"]=>
    string(5) "Beden"
  }
}

select('title')->fetchAll(PDO::FETCH_COLUMN) örneği:

Kod:

$db = new \Buki\Pdox($config);

$records = $db->table('attrs')
		->select('title')
		->fetchAll(PDO::FETCH_COLUMN);

echo '<pre>';
var_dump($records);
echo '</pre>';

Çıktı:

NULL

PDO fetchAll(PDO::FETCH_COLUMN) örneği:

Kod:

$records = $pdo->prepare("SELECT title FROM attrs");
$records->execute();
$records = $records->fetchAll(PDO::FETCH_COLUMN);

echo '<pre>';
var_dump($records);
echo '</pre>';

Çıktı:

array(2) {
  [0]=>
  string(4) "Renk"
  [1]=>
  string(5) "Beden"
}

ozgurg avatar Jun 03 '21 06:06 ozgurg

Selamlar,

Şunu dener misininiz?

$records = $db->table('attrs')
		->select('title')
		->fetchAll('array');

izniburak avatar Sep 20 '21 19:09 izniburak

Merhaba. Gecikme için üzgünüm.

Geçen zamanda yeni sürüm yayınlanmış, ona güncelleyerek denemeyi yaptım.

PDOx sürümü: 1.6.0 PHP sürümü: 8.0.10

->fetchAll('array'); denedim ancak yine NULL çıktısını alıyorum.

Tam kod:

$config = [
    'driver'    => 'mysql',
    'host'      => 'database',
    'database'  => 'myDockerDatabase',
    'username'  => 'docker',
    'password'  => 'docker',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => ''
];


$db = new \Buki\Pdox($config);

$records = $db->table('attrs')
    ->select('title')
    ->fetchAll('array');

echo '<pre>';
var_dump($records);
echo '</pre>';

ozgurg avatar Sep 29 '21 05:09 ozgurg