我是Cakephp 3.2 v的新手。 这里我使用了模型关联(hasMany)。 在绑定部分(campaign_videos)中,我想只获取一条记录, 所以为此,我已经下面的代码来管理它。 我在db。中的实际数据。
[
{
"id": 1,
"user_id": 95,
"campaign_videos": [
{
"id": 1,
"campaign_id": 1,
},
{
"id": 3,
"campaign_id": 1,
}
]
},
{
"id": 2,
"user_id": 95,
"campaign_videos": [
{
"id": 2,
"campaign_id": 2,
}
]
},
$fetchCampaignFirst = $this->Campaigns->find()->contain(['CampaignVideos' => ['queryBuilder' => function ($q) {
return $q->limit(1);
}]]);
我获得此限制仅适用于第一个数据,而不适用于其他数据(其他人甚至不显示获取的数据)。
下面我写了输出
这里我希望得到像
这样的输出[
{
"id": 1,
"user_id": 95,
"campaign_videos": [
{
"id": 1,
"campaign_id": 1,
},
]
},
{
"id": 2,
"user_id": 95,
"campaign_videos": [
{
"id": 2,
"campaign_id": 2,
}
]
}]
只想要第一张campaign_videos记录。 在使用queryBuilder查询之后,我就像使用了。
[
{
"id": 1,
"user_id": 95,
"campaign_videos": [
{
"id": 1,
"campaign_id": 1,
},
]
},
{
"id": 2,
"user_id": 95,
"campaign_videos": [
]
}]
我没有获得第二个id的任何数据,而数据存在。 请建议我。 提前谢谢。
答案 0 :(得分:0)
也许我错了(所以我可以自由地回答我的答案),但我认为使用简单的查询是不可行的
实际上,在加载相关数据时,cake会在关联表上执行单个查询,然后在主表中匹配具有相应数据的行。
所以你需要做一个查找每个类别的第一条记录的mysql查询。即类似于article
中描述的内容我认为唯一(或者更简单)解决方案是遍历您的记录:
$campaigns= $this->Campaigns->find();
foreach($campaigns as $campaign)
{
$campaign->campaign_videos = $this->Campaigns->CampaignVideos-find()
->where(['campaign_id' => $campaign->id]
->order(['id' => 'asc'])
->limit(1);
}