Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CakePHP 1.3 - Nieznana kolumna, w której klauzula

Powinieneś być bardzo ostrożny w związku, którego szukasz. Krótkie spojrzenie na niektóre z tych odpowiedzi wydaje się sugerować po prostu dodanie sprzężenia do modelu poczty e-mail do modelu osoby i poleganie na warunkach wyszukiwania, aby upewnić się, że zapytanie nie przeszuka pamięci serwera.

Zakładam, że przede wszystkim chcesz, aby ta relacja e-mail była dorozumiana we wszystkich zapytaniach dotyczących osoby, w przeciwnym razie możesz po prostu określić sprzężenie dla każdego zapytania, dla którego chciałeś. W takim przypadku zdecydowanie chcesz połączyć go za pomocą relacje modeli .

Twój kod pokazuje, że Shooting i ShootingPlacement (załóżmy, że jest to relacja odwzorowania modelu do modelu) należą do dwóch modeli. Nawiasem mówiąc, strzelanie belongsTo Emisja - której jeszcze nie widzieliśmy. Zakładam, że nie dotyczy to obecnego scenariusza.

Załóżmy teraz, że Twoja tabela poczty e-mail zawiera klucze obce , będzie to hasOne związek, a nie hasMany - więc właśnie tym musisz to połączyć. Połączę go z modelem ShootingPlacement, ponieważ jest to model, o który pytasz, więc powinien to być centralny punkt, w którym modele są połączone wokół niego. Jeśli chodzi o strukturę, ponieważ wszystko wydaje się pochodzić z modelu osoby, musiałbym zasugerować zapytanie to model zamiast. Ale sposób, w jaki jest skonfigurowany do tej pory, pozwala na wysyłanie zapytań z niemal dowolnego miejsca i nadal pobiera w większości te same wyniki z kilkoma nazwami modeli i aliasami tabel.

Po prostu dlatego, że twój klucz obcy między e-mailem a ShootingPlacement ma inną nazwę, a CakePHP 1.3 nie radzi sobie z tym zbyt dobrze, sugeruję również, abyś nie używał klucza obcego, zamiast tego umieszczał go w relacji jako warunki .

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'
        )
    );
}

Dodałem tam również zachowanie możliwe do zawarcia. Dzięki temu możesz kontrolować z każdego zapytania, które powiązane modele chcesz zwrócić z wynikami modelu głównego. Domyślnie będzie to wszystko, ale może być przydatne, gdy potrzebujesz tylko czegoś konkretnego i/lub ze względu na pamięć (tego rodzaju zapytania mogą dość szybko zniszczyć pamięć serwera, jeśli ich nie ograniczysz lub określisz tylko nazwy pól, które chcesz powrót).

Teraz, gdy tworzysz swój model poczty e-mail, nie sugerowałbym dalszego komplikowania tego bałaganu splątanych modeli, ponownie łącząc go z ShootingPlacement. Jak już powiedziałeś, ma on również klucz obcy do modelu Person. Dlatego możesz chcieć zrobić dokładnie to samo, co powyżej dla modelu Person (oczywiście zmieniając warunki, aby odzwierciedlić klucz obcy Person). W ten sposób Twój model jest nieco bardziej elastyczny; nadal dołączy do ShootingPlacement i Osoba, a także pozwoli Ci na osobne zapytanie, jeśli jest to wymagane, bez innych powiązanych modeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql sortuj według, najpierw null, a potem DESC

  2. UTF - 8 z JPA i Glassfish 4.0

  3. Jaka jest różnica wydajności między ignorowaniem wstawiania i zastępowaniem w MySQL?

  4. Ostrzeżenie:mysql_real_escape_string():Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:NIE) .../public_html/checklogin.php

  5. Przykłady UTC_DATE – MySQL