模型关联中绑定属性到父模型怎么实现

类似于tp框架的模型关联中绑定属性到父模型的功能

在laravel中要怎么实现呢

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 33
aab

laravel 应该是不支持的,如果你想按照指定的格式返回,高版本的可以看看 resource api 相关的内容

3年前 评论
kolin (楼主) 3年前

用修改器修改

3年前 评论
kolin (楼主) 3年前
laravelcc (作者) 3年前
kolin (楼主) 3年前
slpi1 3年前
自由与温暖是遥不可及的梦想

为何要绑定到父级 父级直接读子级不就好了

如果非要在父级有的话 那就是 定义访问器 修改器《Laravel 8 中文文档》 然后在直接去拿

3年前 评论
kolin (楼主) 3年前
自由与温暖是遥不可及的梦想 (作者) 3年前
kolin (楼主) 3年前
自由与温暖是遥不可及的梦想 (作者) 3年前
kolin (楼主) 3年前
自由与温暖是遥不可及的梦想 (作者) 3年前
kolin (楼主) 3年前

在laravel模块问tp :joy:

3年前 评论
kolin (楼主) 3年前
boolstone (作者) 3年前
kolin (楼主) 3年前
boolstone (作者) 3年前
kolin (楼主) 3年前
boolstone (作者) 3年前

可以看下tp的实现,自己再拔拉过来自己用

3年前 评论
kolin (楼主) 3年前

数据不应该是一个大的实体,而是有层次感的实体,同理,关系型数据库就是实体之间的关系,模型之间的关系,映射到ORM,但是你的功能可以在appends实现这,不过不推荐

参考:序列化《Laravel 8 中文文档》

3年前 评论
kolin (楼主) 3年前
沐伶风

定义了关系后,在获取器里可以这样获取吧

   public function  getNicknameAttribute()
    {
        return optional($this->parent)->nickname ?? '';
    }
3年前 评论

看了看上面的回复,中心思想《我们尽量不解决问题,我们解决提出问题的人》,把提出问题的人的思维掰弯,达到“解决提出问题的人”的目的

3年前 评论
kolin (楼主) 3年前
aab

datamap ORM 应该比较好的解决这样的问题,AR模式在 laravel 的场景中确实是按照表的结构来来划分模型的。不能够很方便的做到你说这种业务场景。

3年前 评论
kolin (楼主) 3年前

可在你的 Model 基类新增一个方法:

    /**
     * 格式化为一个扁平的数组
     *
     * @return array
     */
    public function toCollapse()
    {
        $result = $this->attributesToArray();
        foreach ($this->relationsToArray() as $relations => $item) {
            foreach ($item as $k => $v) {
                isset($result[$k]) && $k = $relations . '_' . $k;
                $result[$k] = $v;
            }
        }
        return $result;
    }

调用:

$brand = Brand::with('tran')->find(9);
dd($brand->toCollapse());

得到类似输出:

array:11 [
  "id" => 9
  "icon" => ""
  "created_at" => 1647844552
  "updated_at" => 1647844552
  "tran_id" => 59
  "brand" => "BMW"
  "first_letter" => "B"
  "brand_id" => 9
  "language" => "en"
  "tran_created_at" => 1648281558
  "tran_updated_at" => 1648281558
]
2年前 评论

我也想问,有解决方案了吗

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!