当前位置:  开发笔记 > 编程语言 > 正文

Laravel有很多方法无法正常工作

如何解决《Laravel有很多方法无法正常工作》经验,为你挑选了1个好方法。

我有2张桌子,userswebsites.一个用户可以分配多个网站.

public function websites() {
    return $this->hasMany('App\Models\Website');
}

我得到的错误是:

Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string

如果我尝试将其作为数组输出,print_r我会得到数百行数组,我假设这是由某个地方的错误引起的.

另外,如果我在模型顶部指定,为什么必须App\Models\WebsitehasMany方法中使用?Useruse App\Models\Website;

如果我只是Website在方法中使用,我得到类找不到错误:

Class 'Website' not found

没什么大不了的,但是不必使用完整的命名空间路径就更清晰了.

控制器中的代码:

user();
        $user = User::find(5);

        return $user->websites();

        //return view('dashboard');
    }

};

patricus.. 17

websites()函数本身不会导致错误.错误来自您使用该功能的任何地方.

hasMany()函数返回一个Illuminate\Database\Eloquent\Relations\HasMany对象.因此,当您调用时$user->websites(),这将返回HasMany关系对象.无论您在何处使用此功能,您都会尝试将该结果转换为字符串,这是您所看到的错误.

例如:

$user = User::find(1);
echo $user->websites();

在此示例中,如果您尝试echo从该websites()方法的响应,您将收到"无法转换为字符串"错误.

如果这对您没有足够的帮助来解决问题,您将需要发布调用该websites()函数的代码,以便任何人能够进一步提供帮助.

编辑

"控制器不回应网站()方法,它只是返回它." 控制器方法返回的任何内容都将转换为字符串.这是你的问题.

HasMany您需要返回HasMany对象的结果,而不是返回对象.有两个主要选项:调用get()关系以实际获取结果并返回结果,或使用关系属性而不是方法.

选项1:

public function show() {
    $user = User::find(5);

    // call "get()" to get the results
    return $user->websites()->get();
}

选项2:

public function show() {
    $user = User::find(5);

    // use lazy loaded attribute instead of using relationship method
    return $user->websites;
}

这两个以上选项会返回同样的事情:一Collection对的Website对象.由于您是从控制器返回的,因此Laravel会将其转换为字符串,因此您的输出将是json Website对象的json数组.



1> patricus..:

websites()函数本身不会导致错误.错误来自您使用该功能的任何地方.

hasMany()函数返回一个Illuminate\Database\Eloquent\Relations\HasMany对象.因此,当您调用时$user->websites(),这将返回HasMany关系对象.无论您在何处使用此功能,您都会尝试将该结果转换为字符串,这是您所看到的错误.

例如:

$user = User::find(1);
echo $user->websites();

在此示例中,如果您尝试echo从该websites()方法的响应,您将收到"无法转换为字符串"错误.

如果这对您没有足够的帮助来解决问题,您将需要发布调用该websites()函数的代码,以便任何人能够进一步提供帮助.

编辑

"控制器不回应网站()方法,它只是返回它." 控制器方法返回的任何内容都将转换为字符串.这是你的问题.

HasMany您需要返回HasMany对象的结果,而不是返回对象.有两个主要选项:调用get()关系以实际获取结果并返回结果,或使用关系属性而不是方法.

选项1:

public function show() {
    $user = User::find(5);

    // call "get()" to get the results
    return $user->websites()->get();
}

选项2:

public function show() {
    $user = User::find(5);

    // use lazy loaded attribute instead of using relationship method
    return $user->websites;
}

这两个以上选项会返回同样的事情:一Collection对的Website对象.由于您是从控制器返回的,因此Laravel会将其转换为字符串,因此您的输出将是json Website对象的json数组.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有