如何使用CakePHP 2.2按类型查找实体?

时间:2012-10-08 14:36:19

标签: cakephp model filter controller

这是documentation我读过的,这是我正在尝试的内容。首先,我设置了我的模型关联:

<?php
class Proveedor extends AppModel {
    public $hasMany = 'Libro';
    public $displayField = 'Nombre';
}

<?php
class Libro extends AppModel {
    public $belongsTo = 'Proveedor';
}

接下来,我创建了我的控制器和我的动作功能:

public function filter($proveedorName = null) {

    // proveedorName is a string: wrox, apress, oreilly, etc.
    // I need to find all libros that have their 'Proveedor' as $proveedorName.

    $this->set('libros', $this->Libro->find('all', 
    array('conditions' => array('Libros.Proveedor.Name' => $proveedorName))));

    $this->set('proveedores', $this->Libro->Proveedor->find('list'));
}

这是弹出的错误消息:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Libros.Proveedor.Name' in 'where clause'

我的用例非常简单,从下拉列表中选择证明者并让网站返回来自该供应商(libros)的书籍集(proveedor)。

就像你访问:www.google.com/cars/filter/nissan - 你想要看到所有日产汽车。

此处相同的校长:www.google.com/libros/filter/apress - 我想从证明者(libros)Apress获取所有图书(supplier)。

为了便于说明,在C#中使用Entity Framework和Linq我可以去:

var books = db.Libros.Where(x => x.Proveedor.Name == "Apress");

我可以用CakePHP做类似的事情吗?

1 个答案:

答案 0 :(得分:1)

这是错误的:

array('conditions' => array('Libros.Proveedor.Name' => $proveedorName))));

应该是:

array('conditions' => array('Proveedor.Name' => $proveedorName))));

您的数据库字段应该是低位(名称)和下划线,而不是上限(名称)或其他任何内容。遵循惯例,它将使事情变得更加容易。