Проверка, являются ли выбранные строки избранными пользователем в cakeStack Overflow

у меня есть Venue таблица с 20+ столбцами.
у меня тоже есть favorite_venues стол с колоннами

id | userId | venueId

Вот мой код, чтобы получить места

$this->Venue->virtualFields = array(
'bookedCount' => "SELECT count(*) FROM bookings WHERE venueId = Venue.id");

$result = $this->Venue->find('all', array('conditions'=>$conditions,
'order' => array('Venue.bookedCount DESC'),
'limit' => 20,
'offset' => $offset * 20
));

я хочу добавить условие, если я отправляю userId, он должен проверять каждое место, добавлено ли его в список избранного или нет, и установить

$venue['isFavorite'] = yes/no

Я не хочу цикл и проверяю каждое место, которое я получаю. Есть ли способ, который я могу включить в тот же запрос Mysql в CakePHP. Я не уверен, как поставить да / нет в качестве виртуального поля

0

Решение

Вы можете LEFT присоединиться к вашему favorite_venues таблицу, а затем, например, использовать CASE оператор в виртуальном поле, который проверяет, есть ли связанная строка.

Вот непроверенный пример, чтобы проиллюстрировать, что я имею в виду. Я не знаю, как задействован идентификатор пользователя, поэтому вы должны понять это самостоятельно.

$this->Venue->virtualFields = array(
'bookedCount' => "SELECT count(*) FROM bookings WHERE venueId = Venue.id",
'isFavorite' => 'CASE WHEN FavoriteVenues.id IS NOT NULL THEN "yes" ELSE "no" END'
);

$result = $this->Venue->find('all', array(
'conditions' => $conditions,
'order' => array('Venue.bookedCount DESC'),
'limit' => 20,
'offset' => $offset * 20,
'joins' => array(
array(
'table' => 'favorite_venues',
'alias' => 'FavoriteVenues',
'type' => 'LEFT',
'conditions' => array(
'FavoriteVenues.venueId = Venue.id',
)
)
),
// don't forget to group to prevent duplicate results
'group' => 'Venue.id'
));

Смотрите также

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector