2016-10-07 5 views
0

Y at-il un moyen de trouver un enregistrement utilisant ORM dans fuelphp si la clé primaire de la table n'est pas id colonne?Trouver un enregistrement où id n'est pas la clé primaire dans fuelphp

Par exemple, listing_id est ma clé primaire. Et je ne pouvais pas obtenir le résultat souhaité avec:

$listing_id = Input::get('listing_id'); 
$entry = Model_ExampleData::find($listing_id); 
+0

Activer le profileur et le profilage de votre connexion de base de données, et vous verrez que le SQL généré pas correct en raison de la réponse ci-dessous. Ne pas oublier de le remettre en question! – WanWizard

Répondre

1

protégé statique $ _primary_key

Par défaut, il est réglé sur array (« id »), si vous utilisez un autre nom de colonne ou plusieurs clés primaires dont vous avez besoin pour définir cette propriété.

class Model_Article extends Orm\Model 
{ 
    protected static $_primary_key = array('aid'); 
} 

La clé primaire doit être une véritable clé primaire: unique et immuable. Ne l'utilisez pas à d'autres fins (comme une clé étrangère dans une relation un-un), cela ne fonctionnera pas car le PK ne peut pas être changé. L'Orm ne vérifiera pas cela, et même si cela peut sembler fonctionner à première vue: vous aurez des ennuis. Il n'est pas nécessaire pour le PK à auto_increment (bien que de préférence) et vous pouvez spécifier le PK vous, mais seulement la première fois. Une fois que c'est réglé, c'est réglé.

Docs.

0

Vous avez préfixes méthode magique à cet effet: find_by_

En ajoutant ce préfixe, vous pouvez dire FuelPHP trouver réponse (s) en utilisant des champs arbitraires dans votre modèle sans modifier les configurations de modèle, et multiples La condition est possible avec la division des noms de champ par _et_ entre eux.

Model_ExampleData::find_by_FIELD($value) 
Model_ExampleData::find_by_FIELD1_and_FIELD2($value1, $value2) 
Model_ExampleData::find_all_by_FIELD($value) 
Model_ExampleData::find_all_by_FIELD1_and_FIELD2($value1, $value2) 
Model_ExampleData::count_by_FIELD($value1)