私は 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 | |
+------------+-------------+------+-----+---------+-------+