0

嗨,我是 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 的任何数据,而数据存在。请给我建议。先感谢您。

4

1 回答 1

0

也许我错了(所以请随意对我的答案投反对票)但我认为使用简单的查询是不可行的

事实上,cake 在加载关联数据时,会对关联表进行一次查询,然后将行与主表中的相应行进行匹配。

所以你需要做一个mysql查询来找到每个类别的第一条记录。即类似于本文中描述的内容

我认为唯一(或者可能更简单)的解决方案是遍历您的记录:

$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);
}
于 2016-05-18T09:59:56.277 回答