Вы можете использовать findBy()
или findAllBy()
для получения записей, основанных на чем-то отличном от ID. Если вам нужно указать условия для запроса, используйте обычные find()
:
$this->Car->find(
'all',
array(
'conditions' => array(
'CarMake.Slug' => $slug,
'Car.Name LIKE' => $name
),
)
);
Кроме того, для URL, который вы пытаетесь настроить, вам необходимо создать маршрут для /cars
:
Router::connect(
'/cars/:make',
array('controller' => 'cars', 'action' => 'bymake'),
array(
'pass' => array('make'),
'make' => '[A-Za-z]+'
)
);
Edit:
Вышеуказанное работает, если ваши условия основаны на прямой связи с вашей моделью. Если ваши условия находятся на рекурсивной ассоциации (например, Car-> CarModel-> CarMake), вам необходимо использовать явные объединения:
$result = $this->Car->find('all', array(
'joins' => array(
array(
'table' => 'car_models',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array('car_models.id = Car.car_model_id')
),
array(
'table' => 'car_makes',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array(
'car_makes.id = car_models.car_make_id',
'car_makes.slug' => $slug
)
)
),
'conditions' => array(
'Car.name LIKE' => $name
)
));