1

私は何日も費やしている小さな問題を抱えています。CakePHP で 2 つの異なるモデルを検索する必要があります。私は CakeDC 検索プラグインを使用しています。モデルは「Desordens」と「Sinonimos」で、関連付けは hasMany です。1 つの「Desorden」には多くの「Sinonymous」があります。

public $hasMany = array(
    'Sinonimo' => array(
        'className' => 'Sinonimo',
        'foreignKey' => 'desorden_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),

だから、私はこれを作ったCakeDC Docsの例に従います:

public $filterArgs = array(
    'busca' => array(
        'type' => 'like',
        'encode' => true,
        'before' => false,
        'after' => false,
        'field' => array(
            'Desorden.name',
            'Desorden.orphanumber',
            'Sinonimo.sinonimo')
    )
);

私がやりたいのは、ユーザーが名前、orphanumber、または同義語を挿入できる検索です。SQL では次のようになります。

SELECT `Desorden`.`id`, `Desorden`.`name`, `Desorden`.`orphanumber`, `Desorden`.`expertlink`, `Desorden`.`tipodesordem`, `Desorden`.`descricao`, `Sinonimo`.`id`, `Sinonimo`.`sinonimo`, `Sinonimo`.`desorden_id` FROM `rederaras`.`desordens` AS `Desorden` LEFT JOIN `rederaras`.`sinonimos` AS `Sinonimo` ON (`Sinonimo`.`desorden_id` = `Desorden`.`id`) WHERE ((`Desorden`.`name` LIKE 'mult') OR (`Desorden`.`orphanumber` LIKE 'mult') OR (`Sinonimo`.`sinonimo` LIKE 'mult'))

しかし、テーブル「Sinonimo」は結合されておらず、1054 エラーがあります。

エラー: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'Sinonimo.sinonimo' in 'where clause'

何が欠けているのかわからない、次のように構成したコントローラー:

$this->Prg->commonProcess();
        $this->Desorden->recursive = 0;
        $this->Paginator->settings['conditions'] = $this->Desorden->parseCriteria($this->Prg->parsedParams());            
        $this->set('desordens', $this->Paginator->paginate());

クエリが正しい方法で構築されているため、モデルまたは Cakedc の filterArg 構成に問題はないと思います。bindModel を使用してテーブル 'Desordens' と 'Sinonimos' を結合しようとしましたが、成功しませんでした....

$this->Desorden->bindModel(array(
            'hasMany' => array(
                'Sinonimo' => array(
                    'foreignKey' => false,
                    'conditions' => array('Desorden.id = Sinonimo.desorden_id')
                )
            )
        ), false);

誰でもこの参加を手伝ってくれますか?

ありがとう

4

1 に答える 1

0

2 つのモデルで $belongsTo を使用して問題を解決しました。$belongsTo を設定すると、CakeDC はテーブル間に結合を作成します。これが最善の解決策かどうかはわかりませんが、私にとってはうまくいきます。これが誰かを助けるなら。

于 2015-12-11T15:29:20.680 に答える