我有2张桌子,users
和websites
.一个用户可以分配多个网站.
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\Website
在hasMany
方法中使用?User
use 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数组.
该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数组.