2012-10-05 1 views
0

J'ai un problème quand je veux interroger la table en utilisant ORM, par exemple j'ai la table d'article avec l'identification de champ, l'auteur, le texte.Est-il possible de sélectionner un champ personnalisé en utilisant ORM sur Fuelphp?

Mon code comme ceci:

// Single where 
$article = Model_Article::find()->where('id', 4); 
print_r($article); 

code that't sera chercher tous les champs sur l'article de la table, il est comme select * from article where id = 4

Essayez Possibilité

$article = Model_Article::find(null, array('id','title'))->where('id', 3); 

la réponse est

object(Orm\Query)#89 (14) { 
    ["model":protected]=> 
    string(10) "Model_Article" 
    ["connection":protected]=> 
    NULL 
    ["view":protected]=> 
    NULL 
    ["alias":protected]=> 
    string(2) "t0" 
    ["relations":protected]=> 
    array(0) { 
    } 
    ["joins":protected]=> 
    array(0) { 
    } 
    ["select":protected]=> 
    array(1) { 
    ["t0_c0"]=> 
    string(5) "t0.id" 
    } 
    ["limit":protected]=> 
    NULL 
    ["offset":protected]=> 
    NULL 
    ["rows_limit":protected]=> 
    NULL 
    ["rows_offset":protected]=> 
    NULL 
    ["where":protected]=> 
    array(1) { 
    [0]=> 
    array(2) { 
     [0]=> 
     string(9) "and_where" 
     [1]=> 
     array(3) { 
     [0]=> 
     string(5) "t0.id" 
     [1]=> 
     string(1) "=" 
     [2]=> 
     int(3) 
     } 
    } 
    } 
    ["order_by":protected]=> 
    array(0) { 
    } 
    ["values":protected]=> 
    array(0) { 
    } 
} 

ce n'est pas l'ID de retour ou le champ de titre.

mais quand je vais essayer en ajoutant méthode get_one()

$article = Model_Article::find(null, array('id','title'))->where('id', 3)->get_one(); 

id est de retour, mais le titre est pas et un autre domaine, je ne sais pas pourquoi?

Référence

  1. ORM Discussion FuelPHP il est dit ORM être actuellement sélectionner toutes les colonnes, pas l'intention de changer cela pour le moment.

Mon problème

  1. Sélectionnez un champ personnalisé en utilisant ORM comme celui-ci il est select id,owner from article where id = 4 sera de retour que id & propriétaire, il est possible d'obtenir que l'utilisation ORM sur FuelPHP?
+0

Je ne suis pas à la maison maintenant essayer et traverser votre doigt ;-): $ article = Model_Article :: find (null, array ('id', 'owner')) -> où ('id', 4); En lisant le code du framework cela devrait fonctionner, faites le moi savoir afin que je puisse écrire une réponse pour cela. –

+0

je suis mise à jour ma question après que j'essaie votre suggestion ... :) – viyancs

Répondre

3

Ne pas utiliser

Model_Article::find()-> 

mais utilisent

Model_Article::query()-> 

Le premier fonctionne, mais est considéré comme une situation d'erreur qui pourrait changer dans les futures versions.

partir de la version 1.4 du ORM supporte sélectionne partielles, en utilisant

Model::query()->select('id', 'value')-> 

Le second paramètre de find() est un tableau de conditions pour la découverte, comme les clauses 'où' ou 'order_by'. Il n'y a pas de support pour la sélection des noms de colonnes dans ce tableau.

+0

Bonne réponse, merci –

0

si vous essayez de trouver résultat comme requête "select * from article où id = 4"

$article = Model_Article::find()->where('id', 4)->get_one(); 

print_r($article); 

et un concept plus vous devez comprendre get_one() retourne un seul enregistrement (comme un objet). get() renvoie plusieurs enregistrements (sous la forme d'un tableau d'objets). Si votre champ ne s'affiche pas, vérifiez le modèle Model_Article. Ce problème peut se produire lorsque vous n'avez pas déclaré de champs dans la liste des propriétés.

2

Le modèle Orm \ récupère toutes les colonnes car il ne peut pas traiter les objets incomplets/partiels.

Si vous voulez une requête personnalisée, n'utilisez pas l'ORM, utilisez le générateur de requête pour cela.

DB::select('id','title')->from(Model_Article::table())->where('id', 4); 
+0

merci pour votre suggestion, je pense ainsi avec votre suggestion ... :) – viyancs

+0

mais cela ne fixe toujours pas mon problème, je préfère utiliser Direct Query, parce que je peux personnaliser ma requête ... – viyancs

+0

Le Générateur de requêtes a presque la même syntaxe que la classe Orm \ Query. Vous devriez être capable de personnaliser votre requête de la même manière. – Savageman

0

Fuelphp a été publié nouvelle version, vous pouvez voir cette documentation, dans mon cas, la version de fuelphp est 1.2 et ne peut pas sélectionner le champ personnalisé en utilisant orm.

Sélectionner le champ personnalisé à l'aide ORM est disponible depuis la version 1,4

http://fuelphp.com/docs/packages/orm/crud.html

// Find only some columns 
Model_Article::query()->select('id', 'name'); 
Model_Article::find('all', array('select' => array('id', 'name'))); 
Questions connexes