Mysql
 sql >> база данни >  >> RDS >> Mysql

CakePHP 1.3 - Неизвестна колона в клаузата where

Трябва да сте много внимателни с връзката, която търсите. От бърз поглед към някои от тези отговори изглежда, че те ви предлагат просто да добавите присъединяване към модела на имейл във вашия модел Person и да разчитате на условията на вашето намиране, за да сте сигурни, че заявката ви няма да претърси паметта на вашия сървър.

Предполагам, че първо искате тази връзка с имейл да бъде имплицитна във всичките ви заявки за Person, в противен случай можете просто да посочите присъединяването към всяка заявка, за която сте го искали. В този случай определено искате да го свържете с помощта на отношения на модели .

Вашият код показва, че Shooting и ShootingPlacement (да предположим, че това е връзка между модел и модел) принадлежат към два модела. Между другото, стрелбата belongsTo Емисия - която все още не сме виждали тук. Предполагам, че това не е приложимо за текущия сценарий.

Сега нека приемем лошото, че вашата таблица с имейли има външни ключове , това ще бъде hasOne отношение, а не hasMany - така че това е, с което трябва да го свържете. Ще го свържа с модела ShootingPlacement, защото това е моделът, който правите заявка, така че трябва да бъде централната точка, в която моделите се съединяват около него. По отношение на структурата, тъй като изглежда, че всичко произлиза от вашия модел на личността, бих трябвало да ви предложа да потърсите това модел вместо това. Но начинът, по който е настроен досега, ще ви позволи да правите заявки от почти навсякъде и все пак да извличате предимно едни и същи резултати в лентата на няколко имена на модели и псевдоними на таблици.

Чисто защото вашият външен ключ между Email и ShootingPlacement има различно име и CakePHP 1.3 не се справя много добре с това, аз също ще ви предложа да не използвате външен ключ, вместо това да го поставите във връзката като условия .

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

Добавих и съдържащото се поведение там. Това ви позволява да контролирате от всяка заявка кои свързани модели искате да върнете с резултатите от основния модел. По подразбиране ще се използва за всички, но може да бъде удобен само когато искате нещо конкретно и/или поради причини за паметта (тези видове заявки могат да унищожат паметта на сървъра ви доста бързо, ако не ги ограничите или посочите само имената на полетата, които искате да връщане).

Сега, когато създавате своя имейл модел, не бих предложил да усложнявате повече тази каша от заплетени модели, като го свържете отново със ShootingPlacement. Както казахте, той също има външен ключ към модела Person. Така че може да искате да направите точно същото нещо като по-горе за вашия модел Person (разбира се, промените условията, за да отразяват външния ключ на Person). По този начин вашият модел е малко по-гъвкав; пак ще се присъедини към ShootingPlacementи Лице, и също така ще ви позволи да го заявите отделно, ако е необходимо, без другите свързани модели.



  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:композитен индекс пълен текст+btree?

  2. Проблем с изчакване на връзката с MySQL - Приложение Grails на Tomcat, използващо Hibernate и ORM

  3. PHP PDO с foreach и извличане

  4. Отстраняване на грешки в MySQL тригери

  5. Отдалечено свързване към MySQL база данни