我有一个包含 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/