Laravel 4:公共函数根据哪个控制器调用它返回空数据或模型数据?

Posted

技术标签:

【中文标题】Laravel 4:公共函数根据哪个控制器调用它返回空数据或模型数据?【英文标题】:Laravel 4: public function returns empty or model data depending on which controller calls it? 【发布时间】:2014-11-02 06:50:36 【问题描述】:

我有一个带有关联表“user_profiles”的 UserProfile 模型,其中包含一些字段,例如“name”、“user_id”、“contact”。在模型中,有一个函数可以使用 Eloquent ORM 检索此数据,并在返回配置文件对象之前为其添加一个附加属性“省”。

class UserProfile extends Eloquent 
    //....preceding methods ommitted
    public function totalProfile($userid) 
        $profile = $this->find($userid);
        $profile->provinces = Province::all();
        return $profile;
    

当我从 UserProfilesController 调用上述函数时,它会毫无问题地返回配置文件,但是当我尝试从 PagesController 调用该方法时,它只会返回空,如下所示:

class PagesController extends \BaseController 
    public function __contstruct(UserProfile $userProfile) 
        $this->userProfile = $userProfile;
    
    public function show($id) 
        print_r($this->userProfile->totalProfile($id)); //prints nothing
        die;
    

如果有人能帮助解释这是为什么,我将不胜感激?非常感谢!

【问题讨论】:

必须查看整个代码。你有正确的使用说明吗? this->userProfile 中有什么? 【参考方案1】:

我不确定您为什么认为这属于您的模型,但如果您这样做,请使用:

型号:

class UserProfile extends Eloquent 

    protected $appends = ['provinces'];

    public function getProvincesAttribute()
    
        return Province::all();
    


控制器:

class PagesController extends \BaseController 

    public function __contstruct(UserProfile $userProfile)
    
        $this->userProfile = $userProfile;
    

    public function show($id)
    
        return Response::json($this->userProfile->find($id));
    

【讨论】:

感谢您的建议,我不知道将访问器附加到模型。看了你的帖子,发现this additional post on the subject。 我明白你关于将它添加到模型中的意思,实际上我不想添加它,我只想将数据附加到它,以便我可以将省份返回到视图中为方便起见,相同的对象,因为模型包含地区而不是省,我也想显示省并将重新考虑这一点。但我认为我的问题出在其他地方,因为在我添加省份之前似乎就存在问题。如果我从另一个控制器访问它,也许它与在方法中使用 $this->find($id) 有关?

以上是关于Laravel 4:公共函数根据哪个控制器调用它返回空数据或模型数据?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8在null上调用成员函数扩展()

Laravel使用guzzlehttp

从控制器调用外部 API 函数,LARAVEL 4

laravel 4持续数据正在进行 - jquery ajax提交

laravel 4持续数据正在进行 - jquery ajax提交

使用 laravel 4.2 调用控制器外部的 php 函数