【问题标题】:BadMethodCallException Call to undefined method App\User::map()BadMethodCallException 调用未定义的方法 App\User::map()
【发布时间】:2020-03-29 04:58:10
【问题描述】:

我想向$user 集合添加其他数据,以便在view 中获取配置文件字段

我尝试使用$user['profileFields'] = $this->getProfileFields() 并使用compatctwith$user 传递给视图,这工作正常。

DD

但是,我在网上找到了一些参考资料,说我可以使用map 进行扩展,但是当我尝试它时出现以下错误

BadMethodCallException
调用未定义的方法 App\User::map()

这就是我想要理解的内容

问题:
下面的代码是否错误并且不适用于我正在寻找的内容,第一种方法是解决方案?有没有 向$user 集合添加额外数据的推荐方法?

public function show(User $user)
{
    $user->map(function ($user){
       $user['profileFields'] = $this->getProfileFields();
       return $user;
    });

    return view('admin.user.show', compact('user'));
}

【问题讨论】:

    标签: laravel laravel-collection


    【解决方案1】:

    collection 方法是在 collection 上工作的,这里你得到的是 user 的对象。

    $user->profileFields = $user->getProfileFields();
    return view('admin.user.show', compact('user'));
    

    【讨论】:

    • 我明白了。非常感谢。
    【解决方案2】:

    如果profileFields 在另一个表中并且有一个foreign key 和模型ProfileField,则尝试将one to one relation 添加到User 模型。

    User模型中,添加一个函数

    public function profileFields()
    {
        return $this->belongsTo('App\ProfileField', 'foreign_key','other_key');
    }
    

    这将在使用 eloquent 调用时为每个用户提供profileFields

    【讨论】:

    • 谢谢,Rijosh,它不是用于关系表,而是用于从语言中获取一组预定义字段。
    猜你喜欢
    • 2021-03-19
    • 2021-06-24
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多