Cakephp 2.8 извлекает данные из трех таблиц с одним общим столбцом на таблицу пар - PullRequest
0 голосов
/ 27 мая 2019

У меня есть три таблицы, и я хочу знать, какова правильная команда Найти, чтобы вывести правильные модели автомобилей на основе выбранной категории.

Category table
---------------------
Cat_ID Category
1      Sedan
2      SUV
3      Truck

Manufacturers tables
--------------------------
CAR_ID  Cat_ID   Manufacturer
1        1          BMW
2        1          BMW
3        2         Mercedes
4        3          Dodge

Model table
--------------
CAR_ID   Model
1        i320
2        i540
3        GL320
4        RAM

Я смог вытащить правильные автомобили на основе производителей,но это не работает, когда я пытаюсь вытащить автомобили, основанные на категории.

$catid='Sedan';

$car_id = $this->car->find('all',array('fields' => array('car.id'),'conditions' => array('car.category_id' => $catid),'order' => array('car.id' => 'desc')));

$models = $this->Model->find('all',array('conditions' => array('Model.car_id'=>$car_id),'order' => array('Model.id' => 'desc')));

Я хочу, чтобы вывод, если я выбираю Седан, показывал обе модели BMW i32 и i520.

1 Ответ

1 голос
/ 27 мая 2019

Используйте оператор соединения

Я не знаю, какую версию cakephp вы используете, но я использую cakephp 2.0.

        $this->Model->find('all',[
        'joins' => [
            [
                'table' => 'Manufacturers',
                'alias' => 'Manufacturers',
                'type' => 'LEFT',
                'conditions' => [
                    'Category.Cat_ID = Manufacturers.Cat_ID'
                ]
            ],
            [
                'table' => 'Model',
                'type' => 'LEFT',
                'conditions' => [
                    'Model.CAR_ID = Manufacturers.CAR_ID'
                ]
            ]
        ]
      ]);

, если вы хотите ограничить какую категорию вы будете использоватьзатем используйте условия как ниже

    $this->Model->find('all',[
        'joins' => [
            [
                'table' => 'Manufacturers',
                'alias' => 'Manufacturers',
                'type' => 'LEFT',
                'conditions' => [
                    'Category.Cat_ID = Manufacturers.Cat_ID'
                ]
            ],
            [
                'table' => 'Model',
                'type' => 'LEFT',
                'conditions' => [
                    'Model.CAR_ID = Manufacturers.CAR_ID'
                ]
            ]
        ],
        'conditions' => [
            'Category.Cat_ID' => 1
        ]
    ]);

Примечание: использование '[]' и array () технически одинаковы, но, тем не менее, вот пример кода с использованием array ().

    $this->Category->find('all', 
    array(
        'joins' => array(
            array(
                'table' => 'Manufacturers',
                'alias' => 'Manufacturers',
                'type' => 'LEFT',
                'conditions' => array(
                    'Category.Cat_ID = Manufacturers.Cat_ID'
                )
            ),
            array(
                'table' => 'Model',
                'type' => 'LEFT',
                'conditions' => array(
                    'Model.CAR_ID = Manufacturers.CAR_ID'
                )
            ),
        ),
        'conditions' => array(
            'Category.Cat_ID' => 1
        )
    ));

Обновление 2

        $this->Model->find('all', 
        array(
            'joins' => array(
                array(
                    'table' => 'Manufacturers',
                    'alias' => 'Manufacturers',
                    'type' => 'LEFT',
                    'conditions' => array(
                        'Model.Car_ID = Manufacturers.Car_ID '
                    )
                ),
                array(
                    'table' => 'Category',
                    'type' => 'LEFT',
                    'conditions' => array(
                        'Category.Cat_ID= Manufacturers.Cat_ID'
                    )
                ),
            ),
            'conditions' => array(
                'Category.Cat_ID'=>$cat_id
            )
        ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...