Model的paginate如何添加自定义属性
1. 运行环境
1). 当前使用的 Laravel 版本?
Lavavel 9
2). 当前使用的 php/php-fpm 版本?
PHP 版本:8.1
2. 问题描述?
Model的paginate,如何添加自定义属性?
//模型
class User extends Model
{
public function getDeptNameAttribute($value,$attributes)
{
return $this->dept->name ;
}
}
//控制器中调用分页
use App\Models\User;
$list = User::with('dept')->where('xx','xx')->paginate(10);
return Response::json($list);
//结果中没有dept_name,在模型中添加
protected $appends = ['dept_name'];
//结果可正常打印出dept_name,
//但是查询其他不包含dept_id的时候,会报错
//改进
public function getDeptNameAttribute()
{
return isset($this->attributes['dept_id']) ? $this->dept->name :'' ;
}
//这样实现了不查询dept_id时,不报错,代码正常运行
//但存在查询dept_id却不需要dept_name的时候
$list = User::select(['dept_id',...])->limit(10)->get();
//出现N+1问题了:sob:
//一次select from user;
//10次select from dept;
综上所述:
在使用分页器的时候,怎么才能向普通查询一样通过append添加属性
//普通查询这样就行了
$list = User::with('dept:id,name')->where('xx','xx')->get(10)->append(['dept_name]);
//分页是如何处理?
$list = User::with('dept')->where('xx','xx')->paginate(10);
//只能用foreach($list->items() as $item)吗?
试试,这样或许可以。