【发布时间】:2016-06-27 08:28:52
【问题描述】:
路线:
Route::get('test', array('before' => 'auth', 'as' => 'asd', function()
{
$user = User::find('1'); //Auth::user();
$user->Persona->last_name = 'Blaine';
$user->push();
print_r($user->Persona);
exit;
}));
用户模型:
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
protected $table = 'ucpm_users';
public function Persona()
{
return $this->belongsTo('Persona','persona');
}
角色模型:
class Persona extends Eloquent
{
protected $table = 'metadata_personas';
public function User()
{
return $this->hasOne('User', 'persona');
}
public function Telefonos()
{
return $this->hasMany('Telefonos', 'persona');
}
}
当我 Push() 入口模型时,Laravel 抛出一个 ErrorException:
传递给 Illuminate\Support\Collection::__construct() 的参数 1 必须是数组类型,给定对象,在 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Support/Collection 中调用。 php 在第 41 行并定义
入口脚本(模型和路由)在 laravel3 下完全可以工作,我不知道为什么这在 Laravel4 下不起作用。有什么帮助吗?
【问题讨论】:
-
第 41 行是哪一个?
-
公共静态函数 make($items) { if ($items instanceof Collection) return $items;返回新的静态($items); }
-
对不起,我问错了问题。哪一个(来自您的源代码)正在调用 Collection::__construct()?看看哎呀!堆栈列表,一旦习惯了就很容易找到。
-
我没有看到堆栈列表,错误来自我在此处发布的请求的 json 格式 =/ 但是如果我删除 $user->push() 它的响应为 TRUE 而没有任何错误(并且不保存数据)。
-
来自 Apaches 日志:#0 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Support/Collection.php(26): Illuminate\Exception\Handler->handleError( 4096, 'Argument 1 pass...', '/var/www/larave...', 26, Array) #1 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Support/Collection. php(41): Illuminate\Support\Collection->__construct(Object(Persona)) #2 /var/www/laravel/bootstrap/compiled.php(5618): Illuminate\Support\Collection::make(Object(Persona) ) #3 /var/www/laravel/app/modules/ucpm/routes/jsonSetterApi.php(62): Illuminate\Database\Eloquent\Model->push()