CakePHP过滤列表的标签,而不是ID


CakePHP filter list by slug instead of ID

我使用CakePHP,这是我的数据库结构:

<>之前CarMakes----------------------------------ID段名16福特福特CarModels----------------------------------ID名称CarMake_ID10护送16汽车----------------------------------ID名称CarModel_ID1我的车之前

我想查看按CarMakes排列的汽车列表。蛞蝓

所以url应该是:http://localhost/cars/ford

有什么想法或信息的大致方向吗?

您可以使用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]+'
   )
);
编辑:

如果您的条件基于模型上的直接关联,则上述

有效。如果你的条件是一个递归关联(即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
    )
));
相关文章: