В Doctrine 1.2 должно быть хотя бы одно выбранное поле Error. Но одно фактически выбрано - PullRequest
2 голосов
/ 10 октября 2010

За прошедший час я бился головой об стену об этом исключении:

В корневом классе запроса (псевдоним b) должно быть выбрано хотя бы одно поле

в проекте бронирования небольшого школьного отеля - это часть схемы

RoomType:
  actAs: [Timestampable]
  tableName: room_type
  columns:
    name: string(100)
    number_of_bed: integer

Room:
  tableName: room
  columns:
    id:
      type: string(36)
      primary: true
    room_number: integer
    price: decimal
  relations:
    RoomType:
      class: RoomType
      local: type_id
      foreign: id

RoomBooking:
  tableName: roombooking
  actAs: [Timestampable]
  columns:
    id:
      type: string(36)
      primary: true
      room_id: string(36)
      checkin_date: date
      checkout_date: date
      is_cancelled: boolean
  relations:
    Room:
      class: Room
      local: room_id
      foreign: id

Для простоты и короткого поста я отключил определенное поле. Так что в основном я хотел запросить общее количество, тип номеров, забронированных каждый день определенного месяца. только на 24 часа, так что сейчас я просто смотрю на дату заезда. Вот запрос

$q = Doctrine_Query::create ()
->select("SUM(COUNT(b.id)), b.checkin_date as DATE, t.name")
->from ("Hotel_Model_RoomBooking b" )
->leftJoin("b.Room r")
->leftJoin("r.RoomType t")
->where ("b.checkin_date > ? AND b.checkin_date < ?", array ($first, $last))
->groupBy("b.checkin_date, t.name");

$result = $q->fetchArray ();    

b.checkin_date - это одно поле корневого класса, поэтому у меня есть это и выбрано b.id, и до сих пор я не могу понять это. Как вы думаете? что я тут не так делаю? спасибо за чтение и заранее спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Я новичок в Доктрине, и у меня была такая же проблема.Удаление псевдонима заставляет его работать.

0 голосов
/ 24 августа 2017

Вы должны иметь все primary_key в вашей базе данных. Это ваш выбор.например:

->select('(pol.quantity * pol.price) as actual_material_cost')
        ->addSelect('p.project_id')
        ->addSelect('pol.purchase_order_line_id')
        ->addSelect('ri.requisition_item_id')
        ->addSelect('pt.project_task_id')
        ->addSelect('polri.purchase_order_line_req_item_id')
        ->from('PurchaseOrderLines pol')
        ->leftJoin('pol.PurchaseOrderLineReqItems polri')
        ->leftJoin('polri.RequisitionItems ri')
        ->leftJoin('ri.ProjectTasks pt')
        ->leftJoin('pt.Projects p')
        ->where('p.project_id = ?' , $project_id);
0 голосов
/ 30 октября 2014

Это потому, что все поля из корневого элемента являются псевдонимами - это ошибка (об этом сообщается в Jira Doctrine, но я не могу его найти).

->select("SUM(COUNT(b.id)), b.checkin_date as DATE, t.name")

Как вы можете видеть, оба, b.id и b.checkin_date, имеют псевдоним: b.id будет суммой, checkin_date - ДАТА :) Самый простой способ решения вашей проблемы:

->select("SUM(COUNT(b.id)), b.checkin_date as DATE, b.checkin_date, t.name")
...