如何向已有的Laravel查询结果中添加子对象?
给Laravel查询结果的每个用户添加子对象items
你的代码问题在于循环时错误地给整个用户集合添加items属性,而非每个单独的用户对象。以下是修正后的实现方式:
方法一:foreach循环直接赋值
$users = ModelUser::where('date_created', $date)->get(); foreach ($users as $user) { // 直接给每个用户模型实例添加items属性 $user->items = ['test1'=> 'val1','test2' => 'val2','test3'=>'val3']; // 确保JSON返回包含该临时属性 $user->append('items'); } return $users;
方法二:使用集合map方法(更优雅)
$users = ModelUser::where('date_created', $date)->get()->map(function ($user) { $user->items = ['test1'=> 'val1','test2' => 'val2','test3'=>'val3']; $user->append('items'); return $user; }); return $users;
全局自动添加属性的方案
若需要所有ModelUser查询结果都自动包含items,可在模型类中配置:
class ModelUser extends Model { protected $appends = ['items']; public function getItemsAttribute() { return ['test1'=> 'val1','test2' => 'val2','test3'=>'val3']; } }
配置后无需手动赋值,查询结果会自动带上items子对象。
内容的提问来源于stack exchange,提问作者Vincent Dapiton
相关产品推荐
相关产品推荐

