Php 在Laravel中,我可以选择不添加$appends应用于特定数据库调用的模型吗?
我继承了一个Laravel API代码库,之前没有个人接触过Laravel 我面临的一个问题是,控制器返回的内容超出了我的明确要求 例如,用户拥有所有常用的东西-名字、姓氏、电子邮件等 用户还可以订阅课程,完成课程等 在用户模型中,Php 在Laravel中,我可以选择不添加$appends应用于特定数据库调用的模型吗?,php,laravel,eloquent,Php,Laravel,Eloquent,我继承了一个Laravel API代码库,之前没有个人接触过Laravel 我面临的一个问题是,控制器返回的内容超出了我的明确要求 例如,用户拥有所有常用的东西-名字、姓氏、电子邮件等 用户还可以订阅课程,完成课程等 在用户模型中,$appends=[…]与一些setThisAttribute函数一起使用,以从那些关联模型加载数据。我可以理解以前的开发人员为什么这样做,因为这对于正在进行的一些API调用非常方便 到目前为止,我了解这一切 但有时我想做的只是获取我明确要求的用户数据 在控制器中,我
$appends=[…]
与一些setThisAttribute
函数一起使用,以从那些关联模型加载数据。我可以理解以前的开发人员为什么这样做,因为这对于正在进行的一些API调用非常方便
到目前为止,我了解这一切
但有时我想做的只是获取我明确要求的用户数据
在控制器中,我可能会编写如下内容(非常简单的示例):
我想收到:
[
{
id: 1,
first_name: "Jackson"
},
...
]
但我现在得到的是:
[
{
id: 1,
first_name: "Jackson",
courses: [...lots of data...],
lessons: [...even more data...]
},
...
]
所讨论的实际响应的不同之处在于,将我想要的内容下载到客户端的时间小于100ms,而将$appends内容重载到模型上的时间大于10s
是否有一种方法可以选择退出某些DB调用的$appends添加,或者我必须重写整个API以明确询问当前依赖$appends的地方需要什么?是的
在您返回时,您可以使用:
$users=User::select('users.id','users.first_name')->get()->makeHidden(['courses','classes']);
是
在您返回时,您可以使用:
$users=User::select('users.id','users.first_name')->get()->makeHidden(['courses','classes']);
没有一种方法可以轻松排除$appends
属性,因为当模型采用JSON编码时,它们会自动添加。我要说的是,目前的执行方法是一个糟糕的决定,只有在需要的时候,才应该建立关系。@fubar谢谢。我担心情况就是这样。“我想说,目前的实施方法是一个糟糕的决定”,这是我在过去几个月里一直在说的话,正如它所发生的那样:)一个选择可能是更改自定义访问器,使其仅包括课程和课程,其中关系已经加载。因此,如果不显式加载这些关系,它只返回一个空数组。要使其向后兼容,您必须找出需要这些数据的位置,并在这些实例中相应地加载关系。没有一种方法可以轻松排除$appends
属性,因为它们是在对模型进行JSON编码时自动添加的。我要说的是,目前的执行方法是一个糟糕的决定,只有在需要的时候,才应该建立关系。@fubar谢谢。我担心情况就是这样。“我想说,目前的实施方法是一个糟糕的决定”,这是我在过去几个月里一直在说的话,正如它所发生的那样:)一个选择可能是更改自定义访问器,使其仅包括课程和课程,其中关系已经加载。因此,如果不显式加载这些关系,它只返回一个空数组。要使其向后兼容,您必须找出需要这些数据的位置,并在这些情况下相应地加载关系。您这个美丽的人!我将把我的第一个孩子留给你!你刚刚救了我几天的工作:)你这个美丽的人!我将把我的第一个孩子留给你!您刚刚保存了我计划的几天工作:)
[
{
id: 1,
first_name: "Jackson",
courses: [...lots of data...],
lessons: [...even more data...]
},
...
]