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私のユースケースは非常に単純です。ドロップダウンリストから証明者を選択し、そのサプライヤ()からの本のコレクション()をWebサイトに返すようにしproveedorます。

それはあなたが訪問するかのようです:www.google.com/cars/filter/nissan-あなたはすべての日産車を見たいです。

ここで同じプリンシパル:www.google.com/libros/filter/apress-私はすべての本(libros)をprovedor(supplier)Apressから取得したいと思います。

説明のために、Entity FrameworkとLinqを使用するC#では、次のことができます。

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 に答える