2012-12-06 29 views
28

laravel bir nesnenin bir dizi olarak bir ham sorgudan bir sonuç kümesi nasıl alınır, laravel en ham sorgu yöntemleri stdClass nesnelerin diziler olarak sonuç:yerine Varsayılan olarak 3

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [username] => admin 
      [password] => admin123 
      [email] => [email protected] 
      [created_at] => 2012-12-06 18:57:19 
      [updated_at] => 2012-12-06 00:00:00 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [username] => userna 
      [password] => user 
      [email] => [email protected] 
      [created_at] => 2012-12-06 00:00:00 
      [updated_at] => 2012-12-05 00:00:00 
     ) 
) 

soru nasıl etmektir

Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [username] => admin 
       [password] => admin123 
       [email] => [email protected] 
       [created_at] => 2012-12-06 18:57:19 
       [updated_at] => 2012-12-06 00:00:00 
      ) 

     [1] => Array 
      (
       [id] => 2 
       [username] => userna 
       [password] => user 
       [email] => [email protected] 
       [created_at] => 2012-12-06 00:00:00 
       [updated_at] => 2012-12-05 00:00:00 
      ) 
    ) 
+0

değiştirerek dizi olarak her zaman tüm sonuç almak olabilir sizin Bu –

+6

ile sonuçlanan kod Bu benim için mükemmel bir anlam ifade etti, Laravel'i öğrenmeye çalışıyorum ve bu r'ye koştum. oadblock. Bu gerçek ve geçerli bir soru - bunu söyleyenlerin bu çerçevede herhangi bir deneyimi olmadığını merak ediyor musunuz? – NightMICU

+7

Neden bu kapalıydı? İnsanların üstesinden gelmeleri gerekiyor. – dardub

cevap

19

Orijinal cevap sizin dönen dizidir

Eloquent Dokümanlar bir yöntem to_array()

sahiptir:

to_array yöntemi otomatik tüm çekecek Yüklediğiniz tüm ilişkilerin yanı sıra modelinizdeki özellikler.

$user = User::find($id); 

return Response::json($user->to_array()); 

veya

return Response::eloquent($user); 

Akıcı kullanıyorsanız, sen Sinan Önerilen yapmak ve nesneler yerine bir ilişkisel dizi dönmek için küresel yapılandırmasını değiştirebilir. Alternatif olarak, çoğu durumda genel seçenek tercih edilebilir olsa da, bir nesneyi diziye dönüştürmek için JSON'a dönüştürebilirsiniz. Aşağıdakileri, nesneleri normalde tercih ettiğiniz ancak belirli kenar durumlarında bir diziye ihtiyaç duyduğunuz projelerde kullanabilirsiniz. Bu yöntem Eloquent ile iyi oynamamaktadır, bu durumda yukarıdaki yöntemleri kullanın.

$users = DB::table('users')->where('name', '=', 'david')->get(); 

return array_map(function($val) 
{ 
    return json_decode(json_encode($val), true) 
}, $users); 

Diğer bir seçenek geçici olarak laravel için çalışma anı yapılandırma

Config::set('database.fetch', PDO::FETCH_ASSOC); 

değiştirmektir ~ laravel 4'te 4

itibaren, tüm yöntem adları PSR-2 standartlarına uygundur.

$user = User::findOrFail($id); 

return Response::json($user->toArray()); 

// In Laravel 5 onward the functions are preferred to facades. 
return response()->json($user->toArray()); 
+1

işlenmeyen İstisna İleti göndermeden önce yöntemi kendim: tanımsız yöntem stdClass için Çağrı :: to_array() Bu laravel 3.x içindir – Ramesh

+0

, 'to_array()' anlamlı bir yöntemdir. Ayrıca http://laravel.com/docs/database/eloquent dokümanlarında. Sorunun nerede olduğunu görmek için bazı kodlarınızı paylaşır mısınız? –

+0

Akıcı 'to_array() 'eşdeğerine sahip mi? – Nyxynyx

11

bu pasajı kullanabilirsiniz değilse ben laravel dizi olarak sonuçlarını döndürmek için inşa işlevi varsa bilmiyorum ama:

laravel yerine Diziler dizisi dönmek zorunda $data nesneler laravel 3

$data = json_decode(json_encode((array) $data), true); 
+0

yeniden açınız. Çok teşekkür ederim. onun çalışması ... :) – Ramesh

+0

@ramesh Sorun değil, burada laravel yöntemleri kullanarak daha fazla kullanım olabilir burada başka bir cevap var bkz. DavidBarker cevap – Dale

+0

Bu çok kötü bir uygulamadır, çünkü hem şifreleme hem de kod çözme. Bu tam olarak aynı sonuca yol açacaktır: '$ data = (dizi) $ data;' –

35

Ayrıca veriniz

application/config/DatabaseFunctions.php

hattı 31
'fetch' => PDO::FETCH_CLASS, 

için

'fetch' => PDO::FETCH_ASSOC, 
+0

laravel 4 – vuhung3990

+0

üzerinde çalışmak ama kodda dinamik olarak nasıl yapılır? Sadece bir DB bağlantısı için Array olarak almak istiyorum. Bu bağlantı var '$ sqlserv_connection = DB :: bağlantı ($ this-> getSqlServerConnectionName());' $ sqlserv_connection-> getirme (PDO :: FETCH_ASSOC) gibi bir şey istiyorum '' Bu mevcut değil biliyorum ama nasıl olabilir Bunu başardım mı? –

+1

Sadece 'getirme' ayarının bağlantıya özel olmadığını ve veritabanı.php'nin üstünde olduğunu belirtmek istiyorum. Bir şekilde, bağlantıya özel olduğunu ve hiçbir bağlantıya sahip olmayan her bağlantıya eklediğimi anladım. Umarım bu diğer yanlış yönlendirilmiş ruhlara yardımcı olur. –

İlgili konular