Как искать отношение многих ко многим в Учении? - PullRequest
0 голосов
/ 16 августа 2011
User:
  columns:
    id:
      type: integer(4)
      autoincrement: true
      primary: true
    username:
      type: string(255)

Group:
  tableName: group_table
  columns:
    id:
      type: integer(4)
      autoincrement: true
      primary: true
    name:
      type: string(255)
  relations:
    Users:
      foreignAlias: Groups
      class: User
      refClass: GroupUser

GroupUser:
  columns:
    group_id:
      type: integer(4)
      primary: true
    user_id:
      type: integer(4)
      primary: true
  relations:
    Group:
      foreignAlias: GroupUsers
    User:
      foreignAlias: GroupUsers


DB:
USER:
id | username
1  | john
2  | kate
3  | alan

GROUP:
id  | name
1   | admin
2   | mod
3   | kate (!)

USERGROUP:

id_user | id_group
1       | 1
2       | 1
1       | 2
3       | 3
3       | 2
2       | 3

Я бы хотел сделать поисковую систему. Я буду искать, например, слово: "KATE". Как я могу найти во многих таблицах для KATE?

В поиске ввода я пишу "KATE". Я должен использовать ГДЕ, КАК В Учении. Как должен выглядеть этот запрос? Это должно показать мне всех пользователей с именем пользователя Kate и всех пользователей группы Kate.

1 Ответ

1 голос
/ 16 августа 2011

Ваш DQL соответствует следующему ...

Поиск пользователей с именем kate или Users в группе kate, возвращая пользователей и группы

FROM User u LEFT JOIN u.Groups g WHERE u.username LIKE 'KATE' OR g.name LIKE 'KATE'

так ...

$qry = Doctrine_Query::create()
  ->from('User u')
  ->leftJoin("u.Groups g")
  ->where("u.username LIKE ? OR g.name LIKE ?", array('KATE','KATE'));
...