我想运行技能函数,但我做不到。
Route.php
Route::get('setting',function(){
return \App\User::first()->skills();
});User.php
protected $casts = [
'skills' => 'json'
];
public function skills(){
return new Skills($this , $this->skills);
}Skills.php
namespace App;
use App\User;
use Mockery\Exception;
class Skills
{
protected $user;
protected $skills = [];
public function __construct(User $user,array $skills){
$this->user=$user;
$this->skills=$skills;
}
}我想进入/settings页面,我有"The Response content must be a string or object implementing __toString(), "object" given.“错误。
我尝试在路由中添加dd()函数的返回值,我看到了所有的JSON数据,但$skills->get(),$skill->set()当时不起作用。
编辑:
Skills.php
<?php
/**
* Created by PhpStorm.
* User: root
* Date: 01.08.2015
* Time: 11:45
*/
namespace App;
use App\User;
use Mockery\Exception;
class Skills
{
protected $user;
protected $skills = [];
public function __construct(User $user,array $skills){
$this->user=$user;
$this->skills=$skills;
}
public function get($key){
return array_get($this->skills,$key);
}
public function set($key,$value){
$this->skills[$key]=$value;
return $this->duration();
}
public function has($key){
return array_key_exists($key,$this->skills);
}
public function all(){
return $this->skills;
}
public function merge(array $attributes){
$this->skills = array_merge(
$this->skills,
array_only(
$attributes,
array_keys($this->skills)
)
);
return $this->duration();
}
public function duration(){
return $this->user->update(['skills' => $this->skills]);
}
public function __get($key){
if ($this->has($key)) {
return $this->get($key);
}
throw new Exception("{$key} adlı Yetenek bulunamadı");
}
}发布于 2015-08-02 19:31:16
当你这样做的时候
return \App\User::first()->skills();您返回的是关系定义对象,该对象不实现__toString()方法。返回相关对象所需的内容是
return \App\User::first()->skills;这将返回一个包含相关技能的集合对象-它将被正确序列化。
发布于 2016-10-26 13:59:31
也许你可以通过对象变量使用get_object_vars($skills)和后来的loop。示例:
foreach(get_object_vars($skills) as $prop => $val){
}发布于 2017-09-19 00:23:09
在Route.php中,返回如下所示的集合
Route::get('setting',function(){
return \App\User::first()->skills;
});或
Route::get('setting',function(){
$skills = \App\User::first(['id','skills']);
return $skills->skills;
});在你的User.php模型上,你可以这样分解你的代码
protected $casts = [
'skills' => 'json'
];
public function skills()
{
return $this->skills;
}我希望这对某些人有帮助。
https://stackoverflow.com/questions/31771276
复制相似问题