sql >> Databasteknik >  >> RDS >> Mysql

CakePHP 1.3 - Okänd kolumn i where-satsen

Du bör vara mycket försiktig med förhållandet du är ute efter. Från en snabb blick på några av dessa svar verkar de föreslå att du helt enkelt lägger till en koppling till e-postmodellen i din personmodell och litar på villkoren för ditt fynd för att säkerställa att din fråga inte genomsöker din servers minne.

Jag kommer att anta att du först och främst vill att denna e-postrelation ska vara implicit i alla dina frågor på Person, annars kan du helt enkelt specificera kopplingen till varje fråga du ville ha den för. I det här fallet vill du definitivt länka den med modellrelationer .

Din kod visar att Shooting och ShootingPlacement (antar att detta är en modell-till-modell-mappningsrelation) båda tillhör två modeller. Förresten, Shooting belongsTo Emission - som vi inte har sett här än. Jag antar att detta inte är tillämpligt på det aktuella scenariot.

Låt oss nu anta det dåliga eftersom din e-posttabell har främmande nycklar , kommer det att vara en hasOne relation, snarare än en hasMany - så det är vad du behöver länka den med. Jag kommer att länka den till ShootingPlacement-modellen eftersom det här är modellen du frågar efter, så det bör vara den centrala punkten där modellerna sammanfogas runt den. Strukturmässigt, eftersom allt verkar härröra från din personmodell, måste jag föreslå att du frågar det modell istället. Men sättet det har ställts in hittills gör att du kan fråga från nästan var som helst och fortfarande hämta mestadels samma resultat förutom några modellnamn och tabellalias.

Enbart för att din främmande nyckel mellan e-post och ShootingPlacement har ett annat namn, och CakePHP 1.3 inte hanterar detta särskilt bra, kommer jag också att föreslå att du inte använder en främmande nyckel, istället lägger den in i relationen som villkor .

class ShootingPlacement extends AppModel
{
    var $name = 'ShootingPlacement';
    var $actsAs = array('Containable');

    var $hasOne = array(
        'Email' => array(
            'className' => 'Email',
            'foreignKey' => false,
            'conditions' => array(
                'Email.shooting_placement_id = ShootingPlacement.id',
                'Email.person_id = ShootingPlacement.person_id'
            )
        )
    );

    var $belongsTo = array (
        'Person' => array (
            'className' => 'Person',
            'foreignKey' => 'person_id',
            'order' => 'lastname ASC'
        ),
        'Shooting' => array (
            'className' => 'Shooting',
            'foreignKey' => 'shooting_id'
        )
    );
}

Jag har också lagt till det innehållsbara beteendet där. Detta låter dig styra från varje fråga vilka associerade modeller du vill returnera med dina primära modellresultat. Det kommer som standard till alla, men kan vara praktiskt när du bara vill ha något specifikt och/eller av minnesskäl (dessa typer av frågor kan förstöra ditt serverminne ganska snabbt om du inte begränsar dem eller bara anger de fältnamn du vill returnera).

Nu när du skapar din e-postmodell, skulle jag inte föreslå att du komplicerar denna röra av intrasslade modeller ytterligare genom att länka tillbaka den till ShootingPlacement igen. Som du har sagt har den också en främmande nyckel till personmodellen. Så du kanske vill göra exakt samma sak som ovan för din personmodell (ändra villkoren för att återspegla den främmande nyckeln Person såklart). På så sätt är din modell lite mer flexibel; den kommer fortfarande att gå med i ShootingPlacement och person, och låter dig också fråga den separat om det behövs utan de andra associerade modellerna.



  1. Docker-behållare för Postgres 9.1 exponerar inte port 5432 för värd

  2. Hur man hanterar en äldre databas i Django-ramverket

  3. Hur Random() fungerar i PostgreSQL

  4. Kan inte se MySQL BIT-fältvärdet när du använder SELECT