cakePHP - не могу вытащить ассоциацию модели через ownTo во второй рекурсии - PullRequest
1 голос
/ 16 июля 2011

Я пытаюсь найти («все» ...) модель с множеством ассоциаций в cakePHP 1.3, которая имеет критерии фильтрации для запроса на втором уровне рекурсии в схеме. Просто это выглядит так, и я хочу отфильтровать для UserId:

Delivery belongsTo Order, Order belongsTo User.

Вот ассоциаты:

Заказ: var $ ownTo = array (

  'User' => array(
      'className' => 'User',
      'foreignKey' => 'user_id',
      'conditions' => '',
      'fields' => '',
      'order' => ''
  ),....

Доставка: var $ ownTo = array (

   'Order' => array(
       'className' => 'Order',
       'foreignKey' => 'order_id',
       'conditions' => '',
       'fields' => '',
       'order' => ''
   ),...

Полученная ошибка:

Ошибка SQL: 1054: неизвестный столбец «User.id» в «предложении где» [CORE / cake / libs / model / datasources / dbo_source.php, строка 684]

Вот полный запрос, просто для удовольствия:

SELECT Delivery. id, Delivery. order_id, Delivery. delivery_address_id, Delivery. deliver_date, Delivery. created, Delivery. modified, Delivery. deliver_run, Delivery. product_mix_id1, Delivery. product_mix_id2, Delivery. product_mix_id3, Delivery. product_mix_id4, Delivery. assembled, Delivery. shipped, Delivery. rated, Delivery. price, Delivery. product_lines_id, Order. id, Order. user_id, Order. product_lines_id, Order. order_date, Order. deliver_monday, Order. deliver_tuesday, Order. deliver_wednessday, Order. deliver_thursday, Order. deliver_friday, Order. deliver_saturday, Order. delivery_address_id, Order. payment_delay, Order. active, Order. cancle_date, Order. replaced_order_id, Order. created, Order. modified, DeliveryAddress. id, DeliveryAddress. delivery_company, DeliveryAddress. delivery_title, DeliveryAddress. delivery_first_name, DeliveryAddress. delivery_last_name, DeliveryAddress. delivery_street, DeliveryAddress. delivery_house_nr, DeliveryAddress. delivery_postal_code, DeliveryAddress. delivery_town, DeliveryAddress. delivery_country, DeliveryAddress. created, DeliveryAddress. deleted, DeliveryAddress. modified, ProductLine. id, ProductLine. name, ProductLine. description, ProductMix1. id, ProductMix1. name, ProductMix1. description, ProductMix1. image_small_path, ProductMix1. image_normal_path, ProductMix1. product_categories_id, ProductMix1. depricated, ProductMix1. created, ProductMix1. modified, ProductMix2. id, ProductMix2. name, ProductMix2. description, ProductMix2. image_small_path, ProductMix2. image_normal_path, ProductMix2. product_categories_id, ProductMix2. depricated, ProductMix2. created, ProductMix2. modified, ProductMix3. id, ProductMix3. name, ProductMix3. description, ProductMix3. image_small_path, ProductMix3. image_normal_path, ProductMix3. product_categories_id, ProductMix3. depricated, ProductMix3. created, ProductMix3. modified, ProductMix4. id, ProductMix4. name, ProductMix4. description, ProductMix4. image_small_path, ProductMix4. image_normal_path, ProductMix4. product_categories_id, ProductMix4. depricated, ProductMix4. created, ProductMix4. modified ОТ deliveries КАК Delivery ВЛЕВО СОЕДИНЯЕТСЯ orders КАК Order ВКЛ (Delivery. order_id = Order. id) СЛЕДУЮЩИЙ РЕЙС 1205 *. delivery_address_id = DeliveryAddress. id) ЛЕВОЕ СОЕДИНЕНИЕ product_lines AS ProductLine ВКЛ (Delivery. product_lines_id = ProductLine. id) ЛЕВОЕ СОЕДИНЕНИЕ product_mixes AS ProductMix1 ВКЛ (Delivery. product_mix_id1 = ProductMix1. id) ЛЕВОЕ СОЕДИНЕНИЕ product_mixes AS ProductMix2 ВКЛ (Delivery. product_mix_id2 = ProductMix2. id) ЛЕВОЕ СОЕДИНЕНИЕ product_mixes КАК ProductMix3 ВКЛ (Delivery. product_mix_id3 = ProductMix3. id) ЛЕВОЕ СОЕДИНЕНИЕ product_mixes КАК ProductMix4 ВКЛ (Delivery. product_mix_id4 = ProductMix4. id) ГДЕ User. id = 1

Кто-нибудь знает, почему торт не тянет второй уровень, в данном случае модель User, когда даже рекурсивный установлен на 5?

Большое спасибо.

1 Ответ

0 голосов
/ 16 июля 2011

РЕДАКТИРОВАТЬ : Мне просто пришло в голову, что в вашем случае вам на самом деле не нужен 2-й уровень JOIN, поскольку вы можете фильтровать по Order.user_id (вместо User.id)!Вы понимаете мою точку зрения?

Так что, вероятно, вам не нужно решение ниже.


Насколько я знаю, Cake никогда не выполняет сам 2-й уровень JOIN, поэтому для фильтрации (условий) на 2-м уровне(и глубже) я использую joins.

Для вашего примера:

$options['joins'] = array(
    array(
        'table' => 'orders',
        'alias' => 'Order',
        'type' => 'LEFT',
        'conditions' => array(
            'Order.id = Delivery.order_id',
        )
    ),
    array(
        'table' => 'users',
        'alias' => 'User',
        'type' => 'LEFT',
        'conditions' => array(
            'User.id = Order.user_id',
            'User.some_field' => $someFilteringValue
        )
    )
);
$result = $this->Delivery->find('all', $options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...