[英]cakephp OR condition not working
我有一張屬於會議的活動表。 事件具有和屬於多個組,細分,區域和區域。 當前,頁面顯示所有事件,這些事件至少具有1個與用戶鏈接到的組,段,區域和區域。 我在事件表中添加了一個字段filter_by_area,該字段檢查事件是否只顯示給某些區域/地區或所有人。 我需要更改查找,以便顯示的事件要么是誰filtered_by_area為0,要么該事件鏈接到與用戶相同的區域/區域。 但我似乎無法使其顯示未過濾的事件。 這是我的代碼:
$conditions = array(
'conditions' => array(
'Meeting.id' => $id,
array(
'OR' => array(
array("Event.filtered_by_area" => 0),
array("AreasEvent.area_id IN ('$areas')",
"EventsRegion.region_id IN ('$regions')")
))
),
'joins' => array(
array(
'table' => 'events',
'alias' => 'Event',
'type' => 'INNER',
'conditions' => array(
'Meeting.id = Event.meeting_id'
)
),
array(
'table' => 'areas_events',
'alias' => 'AreasEvent',
'type' => 'LEFT',
'conditions' => array(
'Event.id = AreasEvent.event_id',
)
),
array(
'table' => 'areas',
'alias' => 'Area',
'type' => 'LEFT',
'conditions' => array(
'Area.id = AreasEvent.area_id',
)
),
array(
'table' => 'events_regions',
'alias' => 'EventsRegion',
'type' => 'LEFT',
'conditions' => array(
'Event.id = EventsRegion.event_id',
)
),
array(
'table' => 'regions',
'alias' => 'Region',
'type' => 'LEFT',
'conditions' => array(
'Region.id = EventsRegion.region_id',
)
)
),
'contain' => array(
'Event.Segment',
'Event.Asset' => array(
'Image',
'Document',
'VimeoVideo',
'Link'
),
'Event.Group' => array(
'conditions' => array(
'Group.name' => $this->group_name
)
),
'Event.Area' => array(),
'Event.Region' => array()
)
);
if (!$this->Meeting->exists()) {
throw new NotFoundException(__('Invalid meeting'));
}
$conditions['contain']['Event.Segment'] = array(
'conditions' => array(
'Segment.id' => $segments
)
);
$conditions['contain']['Event.Area'] = array(
'conditions' => array(
'Area.id' => $areas
)
);
$conditions['contain']['Event.Region'] = array(
'conditions' => array(
'Region.id' => $regions
)
);
if (isset($dates[$day])) {
$conditions['contain']['Event'] = array(
'conditions' => array(
'date_format(Event.start, "%Y-%m-%d")' => $dates[$day]
),
'order' => 'Event.start asc'
);
}
$meeting = $this->Meeting->find('first', $conditions);
有什么幫助嗎?
這里 :
'或'=> array(array(“ Event(filter.by_area” => 0),array(“ AreasEvent.area_id IN('$ areas')”,“ EventsRegion.region_id IN('$ regions')”)))
刪除它,並更改為這種方式:
'contain'=> array('Model'=> array('condition'=> $ condition))
這里:
array(
'OR' => array(
array("Event.filtered_by_area" => 0),
array("AreasEvent.area_id IN ('$areas')",
"EventsRegion.region_id IN ('$regions')")
))
)
刪除包裝“ OR”的數組。 就像這樣:
'conditions' => array(
'Meeting.id' => $id,
'OR' => array(
"Event.filtered_by_area" => 0,
'AND' => array(
"AreasEvent.area_id" => $areas,
"EventsRegion.region_id" => $regions
)
))
)
編輯:更正了IN
子句。 如果$areas
和$regions
是數組,則Cake將在查詢中自動執行IN
語句
編輯2: OR
內部更正的數組
編輯3:添加了第三次=== AND
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.