【问题标题】:Laravel Repository eager load predefined accessorLaravel Repository 急切加载预定义的访问器
【发布时间】:2017-08-18 09:17:39
【问题描述】:

只是想知道是否可以在 Laravel 存储库中预先加载已定义的访问器。我目前正在使用这个 l5-repository 包和 Laravel 5.4。

在我的UserInfo.php 模型中,我有这个功能

public function getFullNameAttribute()
{
    return ucfirst($this->first_name . " ". $this->last_name);
}

然后我尝试像这样在我的控制器中急切加载该访问器。

$user_infos = $this->repository->with('full_name')->all(); 
// or $user_infos = $this->repository->with('getFullNameAttribute')->all();
return response()->json([ 'data' => $user_infos ]);

我知道这行不通。我只是在寻找一种类似的方法来将我的访问器 full_name 添加到我的收藏中。所以我不需要在我的前端连接。所以我的预期结果是

{
   id : 1,
   first_name : "Sample fname",
   last_name : "Sample lname",
   .....
   .....
   full_name : "Sample fname Sample lname",
}

【问题讨论】:

  • 急切加载的逻辑因您的情况而异。它将用于关系,在此示例中使用它没有任何意义。
  • 此外,访问器将在您的收藏中可用,您可以使用它。但是如果你想创建另一个集合,你可以循环并手动插入它。
  • 问题是,当我在控制器上循环该集合时,我只能获得full_name。我无法在我的前端(JS)中访问它。我添加了return response()->json([ 'data' => $user_infos ]);
  • 您有其他选择吗?建议。
  • 检查我的答案

标签: php laravel repository-pattern accessor


【解决方案1】:

在您的模型中使用$appends UserInfo.php

protected $appends = ['full_name'];

这会将这个自定义字段附加到您的集合中。

那么你可以在这里看到它:

$user_infos = UserInfo::all(); 
$user_infos->toJson();

您可以在 json 中看到附加的访问器。

【讨论】:

  • 我个人不喜欢使用访问器。我想将它提取到一个单独的方法并循环通过集合来访问它。但如果你愿意,你可以做到。
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 2019-03-06
  • 1970-01-01
  • 2014-08-13
  • 2021-04-23
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多