【问题标题】:Laravel Eloquent: how to add a column to a query response?Laravel Eloquent:如何在查询响应中添加列?
【发布时间】:2017-04-30 16:30:59
【问题描述】:

换句话说,假设我有一个这样的查询:

return Location::valid()
    ->with('owners', 'gardeners')
    ->withCount('gardeners')
    ->get();

返回一些 json :

[
 {
   name: 'LocationA',
   nb_gardeners_max: 3,
   owners: [...],
   garderners: [...],
   garderners_count: 2
 }
]

在 json 响应中,我想添加一些自定义条目,例如 is_fullavailable_places

[
 {
   name: 'LocationA',
   nb_gardeners_max: 3,
   owners: [...],
   garderners: [...],
   garderners_count: 2,
   ...
   is_full: false,
   available_places: 1
 }
]

我想这与原始/加入/聚合有关...但我真的不明白该怎么做。任何帮助将不胜感激

编辑

Minhajul 的答案非常有用,但不可能对附加属性执行 WHERE 子句。

Location::where('is_full',true)->get() // NOT WORKING

虽然仍然可以对其执行 filter(),但我想使用 JOIN 来执行单个查询

【问题讨论】:

    标签: laravel eloquent query-builder


    【解决方案1】:

    为此,您可以添加数据库中没有对应列的属性。为此,您只需修改模型

    public function getIsFullAttribute()
    {
        return $this->attributes['name'] == 'value';
    }
    

    创建此访问器后,您需要将其添加到模型中。

     protected $appends = ['is_full'];
    

    希望对你有所帮助。

    【讨论】:

    • 关于更多问题,似乎不可能对这些属性执行 where 子句。有没有办法?
    • $locationData = Location::valid() ->with('owners', 'gardeners') ->withCount('gardeners') ->get(); $finalData = $locationData->filter(function($data)){ return is_full > 0;我并不是说这是最好的方法,但它应该可以工作。
    • 谢谢,我知道过滤方式但加入方式仍然是一个任务:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2019-12-20
    • 2020-10-18
    • 1970-01-01
    • 2018-08-26
    相关资源
    最近更新 更多