Domanda

So che questo deve avere una risposta facile, ma non riesco a capirlo. Dopo le lacrime, sto sperando che qualcuno qui può aiutare.

Ecco il mio modello YML:

Identity:
  columns:
    id:
      type:           integer(10)
      primary:        true
      autoincrement:  true
    username:
      type:           string(255)

Profile:
  columns:
    id:
      type:           integer(10)
      primary:        true
      autoincrement:  true
    identity_id:
      type:           integer(10)
    profiletype_id:
      type:           integer(10)
    name:
      type:           string(255)
  relations:
    Identity:
      local:          identity_id
      foreign:        id
      class:          Identity
      foreignAlias:   Profiles
    Profiletype:
      local:          profiletype_id
      foreign:        id
      class:          Profiletype
      foreignAlias:   Profiles

Profiletype:
  columns:
    id:
      type:           integer(10)
      primary:        true
      autoincrement:  true
    type:
      type:           string(255)

Come si può vedere, 3 tabelle collegate vengono generati:


Identità - può avere più profili


Profilo - ha una
Identità - ha una Profiletype

Profiletype
- può avere più profili

Ora, Nel mio codice, posso eseguire query sui modelli generati per Identità e Profiletype.

Ad esempio:

        $q = Doctrine_Query::create()
          ->select('i.*')
          ->from('Identity i');
        echo $q->getSqlQuery();

funzionerà e prodotti:

SELECT i.id AS i__id, i.username AS i__username FROM identity i

Tuttavia, quando vado a correre qualsiasi richiesta sul tavolo, profilo, non funzionerà. Anche una semplice query, ad esempio

        $q = Doctrine_Query::create()
          ->select('p.*')
          ->from('Profile p');
        echo $q->getSqlQuery();

non riesce. Ho provato a cambiare il nome della classe nella FROM a 'Profili' invece di 'profilo'. Ancora niente.

Tutte le idee su quello che sto facendo di sbagliato.

È stato utile?

Soluzione

Dopo aver modificato tutte le variabili possibili e rintracciare attraverso il mio modello di linea per linea, sono venuto a una scoperta imbarazzante:

Il controller stavo chiamando la Dottrina Query è stato chiamato da profile.php.

profile.php

<?php
class Profile extends Controller {

    function Profile()     {
        parent::Controller();
    }

    function index()     {
        $q = Doctrine_Query::create()
            ->from('Profile');
        echo $q->getSqlQuery();
    }

}

Ass appena ho chiamato il controller qualcosa di diverso 'profilo', tutto ad un tratto ha funzionato. Ad esempio, chiamandolo a docile.php:

docile.php

<?php
class Docile extends Controller {

    function Docile()     {
        parent::Controller();
    }

    function index()     {
        $q = Doctrine_Query::create()
            ->from('Profile');
        echo $q->getSqlQuery();
    }

}

'profilo' non sembra essere una parola riservata in CodeIgniter ( link testuale ). E sembra, tuttavia, che non si può chiamare una dottrina 'di classe tabella' da una classe controller con lo stesso nome.

Grazie per i vostri ragazzi di ingresso. Spero che questo consente di risparmiare qualcun altro fastidi simili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top