tp6中关联查询的例子


获取商品详情的进阶版:

2.0版本,1.0已经被我删了

商品详情有:基本的内容,主要是评论,这是一对多的关系,一个商品会有多个评论; // 同时,一个评论对应着一个用户的名称 nickname

想办法把这些内容一次性拿出来,并且放在整理好,放在一个数据里并返回。

================================================================================================================

主要逻辑

// 获取商品详情
public function getProductDetail($product,string $reward)
{
    return $this->whereProductId($product)  // 根据 product_id 查询数据,TP6里的高级查询
                ->with(['comments'=>function($query){  // 关联预载入,关联预查询;
                    $query->filter(function ($comment){  // filter() 在TP6中的 模型/获取器/查询结果处理 可以找到
                        // 试着打印$comment->toArray(),你就这到这是神仙好东西了。
                        // halt($comment->toArray());
                        
                        // 下面那句的意思是:添加一个叫nickname的字段,值为等号右边的值;
                        // 等号右边的意思是,通过User表的 user_id 获取对应的用户名称nickname字段的值
                        // 同样是TP6里的高级查询
                            $comment->nickname = User::getFieldByUserId($comment['user_id'],'nickname');
                        });
                }])
                ->select();
}
// 一对多的模型关联,商品表关联评论表
public function comments()
{
    return $this->hasMany(ProductComment::class,'product_id','product_id');
}

返回的数据

{
    "code": 0,
    "msg": "success",
    "data": [
        {
            "id": 1,
            "product_id": 5,
            "name": "凳子",
            "brand_id": 1,
            "sort_id": "百货",
            "images": "",
            "detail": "haoyon",
            "price": "20.00",
            "market_price": "0.00",
            "sales": 20,
            "reward": "0.00",
            "status": 1,
            "comments": [
                {
                    "id": 1,
                    "product_id": 5,
                    "user_id": 123,
                    "content": "真不错",
                    "nickname": "测试1"
                },
                {
                    "id": 2,
                    "product_id": 5,
                    "user_id": 1234,
                    "content": "不好",
                    "nickname": "测试2"
                }
            ]
        }
    ]
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM