0

这是我读过的文档,这就是我正在尝试的。首先,我建立了我的模型关联:

<?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从 Proveedor ( supplier) Apress 获取所有书籍 ( )。

出于说明目的,在 C# 中使用 Entity Framework 和 Linq 我可以:

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

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

4

1 回答 1

1

这是错误的:

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

应该:

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

并且您的数据库字段应该小写(名称)和下划线,而不是大写(名称)或其他任何内容。遵循约定,它会使事情变得容易得多。

于 2012-10-08T14:41:54.653 回答