php - 检查 cakephp 中的用户是否喜欢选定的行

标签 php mysql cakephp

我有一个包含 20 多列的 Venue 表。 我还有一个包含列的 favorite_venues

id | userId | venueId

这是我获取 field 的代码

$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,我想添加一个条件,它应该检查每个 field 是否添加到收藏夹列表并设置

$venue['isFavorite'] = yes/no

我不需要 for 循环并检查我得到的每个 field 。有什么方法可以将相同的 Mysql 查询合并到 cakephp 中吗?我不知道如何将是/否作为虚拟字段

最佳答案

您可以LEFT加入您的favorite_venues表,然后在虚拟字段中使用CASE语句来检查是否存在链接的行。

这是一个未经测试的示例来说明我的意思。我不知道用户ID是如何涉及的,所以你必须自己弄清楚。

$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'
));

另请参阅

关于php - 检查 cakephp 中的用户是否喜欢选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46168197/

相关文章:

javascript - 如何使用 javascript 在 html 中显示来自 google place photo api 的照片?

php - laravel 会自动添加分组依据吗? Laravel toSql 与正在运行的查询的奇怪行为。

PHP如何显示基于部门的总数据

PHP注册表不保存

mysql - 为什么你会选择在应用层散列密码,而不是使用 mysql SHA2()?

php - 在 CakePHP 2 中不使用外键添加关联值

带有 while 循环的 php 回显表

php - 如何在php codeigniter中一起使用 `where`和 `in`子句?

php - 在 cakephp 中查询所需的 mySql 建议

php - 在 CakePHP Auth 中 - 有没有办法强制 https 对所有需要身份验证的操作(但不是其他操作)