1

私は CakePHP のタグのプラグインを楽しんでおり、次のような単純なクエリを使用して素晴らしい結果を得ています。

$this->Upload->find('all');

これにより、すべてのアップロードと関連するタグが返されます。素晴らしい。

ただし、タグを使用して検索しようとすると、次のようになります。

$this->Upload->find('all', array('conditions' => array('Tag.name' => $tagname)));

「タグ」列が見つからないと不平を言って失敗します。手動検索はまったく同じエラーで失敗します: Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Tag.name' in 'where clause'

$tag = $this->Upload->find('all', array('joins' => array(
        array( 
            'table' => 'tagged',
            'alias' => 'Tagged',
            'type'  => 'left',
            'foreignKey' => false,
            'conditions' => array( 'Tagged.foreign_key' => 'Upload.id'),
        array( 
            'table' => 'tags',
            'alias' => 'Tag',
            'type' => 'left',
            'foreignKey' => false, 
            'conditions' => array('Tag.id' => 'Tagged.tag_id')
            )
        ),
        'conditions' => array( 'Tag.name' => $tagname)

    )));    

ここで何が間違っているのか分かりますか?タグプラグインはこれを行うためのものではありませんか? タグに基づいてアップロードの条件付き検索を行う方法を知りたいです。

タグ プラグイン用に生成されたテーブル:

mysql> show columns from tagged
    -> ;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id           | varchar(36)  | NO   | PRI | NULL    |       |
| foreign_key  | varchar(36)  | NO   |     | NULL    |       |
| tag_id       | varchar(36)  | NO   |     | NULL    |       |
| model        | varchar(255) | NO   | MUL | NULL    |       |
| language     | varchar(6)   | YES  | MUL | NULL    |       |
| times_tagged | int(11)      | NO   |     | 1       |       |
| created      | datetime     | YES  |     | NULL    |       |
| modified     | datetime     | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

タグテーブル:

mysql> show columns from tags;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | varchar(36) | NO   | PRI | NULL    |       |
| identifier | varchar(30) | YES  | MUL | NULL    |       |
| name       | varchar(30) | NO   |     | NULL    |       |
| keyname    | varchar(30) | NO   |     | NULL    |       |
| weight     | int(2)      | NO   |     | 0       |       |
| created    | datetime    | YES  |     | NULL    |       |
| modified   | datetime    | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4

1 に答える 1

0

条件を手動で設定してみてください。タグ プラグインがどのように機能するかはわかりませんが、アップロード モデルがタグに対して hasMany 関係を持っている場合、次のようなものが機能する可能性があります。

$this->Upload->hasMany['Tag']['conditions']['name'] = $tagname;
$this->Upload->hasMany['Tag']['conditions']['model'] = 'Upload';
$this->Upload->hasMany['Tag']['conditions']['foriegn_id'] = $this->Upload->id;
$this->Upload->find('all');

または、次のような$this->Upload->Tag->find('all', array('conditions' => array('Tag.name' => $tagname)));方が良いかもしれません(ただし、それが機能するかどうかはわかりません)。

于 2013-07-29T18:44:17.753 に答える