4

私の CakePHP アプリには、3 つのテーブルがあります。

BusinessesTownsおよびCategories

ビジネスは複数の町と複数のカテゴリに属する​​可能性があるため、結合テーブルhasManybelongsTo関係を作成しました。町またはカテゴリのモデルを使用して検索することにより、町またはカテゴリのいずれかでビジネスを見つけると、すべて正常に機能しますが、特定の町と特定のカテゴリのビジネスを検索したい場合は完全に行き詰まります。ロンドンの配管工。

ビジネス モデルで検索すると関連付けが機能しないようでcolumn not found、関連付けられたテーブルを使用しようとするとエラーが発生します。私はこれが何をする必要があるかの線に沿っていると思いますが、私はそれを機能させることができません:

$this->set('listings', $this->Business->find('all', array(
    'conditions' => array(
        'Business.approved' => 1,
        'BusinessesCategory.category_id' => $id,
        'BusinessesTown.town_id' => $town_id,
        'Business.sasite' => 1
)
4

3 に答える 3

6

これを行うには、テーブルを結合する必要があります。上記の例では、カテゴリをどのように操作する必要があるかを説明します。町は自分で作成できます。

$this->Business->find("all", array(
        "joins" => array(
            array(
                "table" => "businness_categories",
                "alias" => "BusinessesCategory",
                "type" => "LEFT",
                "conditions" => array(
                    "Businesses.id = BusinessesCategory.business_id"
                )
            ),
            array(
                "table" => "categories",
                "alias" => "Category",
                "type" => "LEFT",
                "conditions" => array(
                    "BusinessesCategory.category_id = Category.id"
                )
            )
        ),
        'conditions' => array(
            'Business.approved' => 1,
            'Category.id' => $id,
        )
    ));

ビヘイビアーを使用してそれを行うこともできます: https://github.com/Scoup/SuperJoin

于 2013-04-01T20:57:03.070 に答える
2

こんにちは、非常によく似たセットアップと同じ問題がありました。これが私があなたの問題を解決する方法です:
あなたはあなたのコードの多くを譲らないので、私はいくつかの仮定をし ます
:
カテゴリは $what に格納されます

1 つのテーブルにのみ条件がある場合のコーディング

    $this->Businesses->Town->recursive = -1;
    ....
    $options['joins'] = array(
            array('table' => 'towns',
            'alias' => 'Town',
            'type' => 'inner',
            'conditions' => array(
                'Business.town_id = Town.id',
            )
            )
        );
        $options['conditions'] = array(
            'Town.townName' => $where
        );
        $result = $this->Business->find('all', $options);

2 つのテーブルの条件がある場合のコード

    $this->Businesses->Town->recursive = -1;
    $this->Businesses->Category->recursive = -1;
    ....
    $options['joins'] = array(
            array('table' => 'towns',
            'alias' => 'Town',
            'type' => 'inner',
            'conditions' => array(
                'Business.town_id = Town.id',
            )
            ),
           array('table' => 'categories',
            'alias' => 'Category',
            'type' => 'inner',
            'conditions' => array(
                'Business.category_id = category.id',
            )
            )
        );
        $options['conditions'] = array( 
                'Town.townName' => $where,
            'Category.categoryName' => $what
        );
        $result = $this->Business->find('all', $options);
于 2014-01-01T13:13:52.743 に答える
0

使用できます

$this->Business->find('all', array(
    'conditions' => array(
          'AND' => array(
             'BusinessesTown.town_id' => $town_id,
             'BusinessesCategory.category_id' => $id
        )
      ),
    'recursive' => 2
));
于 2015-04-09T08:53:17.013 に答える