【问题标题】:returning subarray in single sql response在单个 sql 响应中返回子数组
【发布时间】:2020-01-14 12:37:39
【问题描述】:

现在在 laravel 中,我有一个非常简单的函数,通过 ajax 调用返回查询结果

$sql = "
    SELECT  
        itemID,
        itemTime,
        t2.itemCommentType,
        t2.itemCOmment
    FROM ITEM T1
    INNER JOIN COMMENTS T2
    ON T1.itemID = t2.itemID";

try {
    return DB::connection('mysql')->select($sql);
} catch (Exception $e) {
    return false;
}

这工作正常,但由于注释类型,它返回两行,其中 id 和 time 对于两者都是相同的

itemID   |   itemTime   |   itemCommentType   |   itemComment
--------------------------------------------------------------
123         09-11-2019      Title                   Testing
123         09-11-2019      Comment                 New Comment

我应该如何更改我的代码(不是查询)以仅返回一个具有一个 ID 和时间的对象,但为每种评论类型创建一个数组?

我只想要一个结果,但我需要能够在网页的不同区域显示标题和 cmets

【问题讨论】:

  • 你为什么不用模型?你为什么不直接做LIMIT 1->first()
  • 我不想限制,因为我需要两者。内连接返回多个,因为单个项目可以有多个 cmets 和注释类型,我需要它们都在返回的对象中

标签: php sql laravel


【解决方案1】:

我认为您应该像这样按 ItemId 和 itemTime 列分组:

DB::connection('mysql')->select($sql)->where('itemID',$id)->groupBy('itemID','itemTime')->first()

【讨论】:

  • 这仍然会给我两个结果
  • 尝试仅使用 itemID 列分组
【解决方案2】:

使用模型。在项目模型中-

public function itemComents(){
    return $this->hasMany('ItemComment::class', 'itemId');
}

然后得到你的结果-

Item::with('itemComments')->find(123);

使用 cmets 获取所有项目

Item::with('itemComments')

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2017-06-11
    相关资源
    最近更新 更多