簡體   English   中英

cakephp或條件不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM