当前位置: 首页 > 知识库问答 >
问题:

Laravel查询生成器获取自定义属性

越雨泽
2023-03-14

我正在尝试获取自定义属性(https://laravel.com/docs/5.5/eloquent-mutators#defining-访问器)从查询中删除。

现在我有:

你ser.php

public function getViewUrlAttribute()
{
    return route('admin.users.view', ['id' => $this->id]);
}

public function role()
{
    return $this->belongsTo('App\Role')->withDefault([
        'name' => 'User'
    ]);
}

用户控制器。php

public function dataTable(Request $request)
{
    $length = $request->has('length') ? $request->input('length') : 10;
    $orderDirection = $request->input('orderDirection');
    $searchValue = $request->input('search');

    $users = User::select('id', 'name', 'email', 'created_at')->with('role:name')->limit($length);

    if ($request->has('orderBy')) {
        if ($request->has('orderDirection')) {
            $users = $users->orderBy($request->input('orderBy'), $request->input('orderDirection') > 0 ? 'asc' : 'desc');
        } else {
            $users = $users->orderBy($request->input('orderBy'), 'desc');
        }
    }

    return $users->get();
}

返回

[
 {
  "id": 1,
  "name": "User",
  "email": "user@test.com",
  "created_at": "2018-04-24 14:14:12",
  "role": {
   "name": "User"
  }
 }
]

所以问题是:有没有办法也获得view\u url属性?(我用()在内部进行了尝试,但失败了)

我还可以只返回角色名,而不是像您在“return”代码中看到的那样返回整个对象吗?(我想要类似“角色”:“用户”)的内容。

(当然,我试图避免运行原始sql)

谢谢

共有1个答案

漆雕绍晖
2023-03-14

你差不多完成了。。。

1-要添加自定义属性,您需要将其附加到带有$append属性的Model上:

protected $appends = ['view_url'];

并定义属性方法

public function getViewUrlAttribute()
{
    return route('admin.users.view', ['id' => $this->id]);
}

2-要从另一个相关模型向模型添加属性,我认为您应该尝试:

// to add them as attribute automatically
protected $appends = ['view_url', 'role_name'];

// to hide attributes or relations from json/array
protected $hidden = ['role']; // hide the role relation

public function getRoleNameAttribute()
{
    // if relation is not loaded yet, load it first in case you don't use eager loading
    if ( ! array_key_exists('role', $this->relations)) 
        $this->load('role');

    $role = $this->getRelation('role');

    // then return the name directly
    return $role->name;
}

那么您可能不需要事件-

 类似资料:
  • 我对Laravel很陌生,尤其是在从数据库检索东西时。在阅读了他们关于query builder的文档后,我找到了一个部分,其中显示了执行我所需操作的示例代码: 如果不需要整行,可以使用value方法从记录中提取单个值。此方法将直接返回列的值:

  • 我有一个问题,使laravel查询: 我想举个例子: 我有这个但不起作用:

  • 我想在查询生成器laravel中orderBy 因为我的是类型 所以当它排序的时候...结果远远不是我想要的... 我的剧本就像这样 我已经试过了 我如何铸造OrderBy查询生成器,以便我可以排序desc

  • 我正在使用Laravels查询生成器检索带有一些筛选选项的项目列表-我需要在此查询中进行计数: 计算“Freestyle ID”在likes表中出现的次数。 这有可能吗?返回的数据是完美的,我只需要一个自由泳的喜欢量,其中喜欢表中的自由泳ID为空。

  • 我试图从一个表中选择所有结果,并在用户ID匹配时与另一个表合并。 我有三个表:runs、users和一个run\u用户透视表。我想从数据透视表中的“运行”和其他列(即“已完成”、“粘性”、“上次测试”和“难度”)中选择所有结果,但只从当前用户的“运行用户”中提取数据。 在原始SQL中,我通过一个带有AND语句的左连接成功地做到了这一点: 如何通过查询生成器执行此操作,有何建议?我可以在Larave

  • 我有一个自定义文件,其中包含我所有图像的路径及其标签,我在一个数据框中加载使用: MyIndex有两列感兴趣的ImagePath和ClassName 接下来我做一些训练测试拆分和编码输出标签为: 我面临的问题是一次性加载的数据太大,无法放入当前的机器内存,因此我无法处理完整的数据集。 我曾尝试使用datagenerator,但不想遵循它遵循的目录约定,也无法消除增强部分。 问题是,是否有一种方法可