【问题标题】:Argument 1 passed to Illuminate\\Support\\Collection::__construct() must be of the type array, object given传递给 Illuminate\\Support\\Collection::__construct() 的参数 1 必须是数组类型,对象给定
【发布时间】: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()

标签: laravel laravel-4


【解决方案1】:

是的,正如我在评论中提到的那样,这是 Laravel 的一个错误。幸运的是,泰勒刚刚在 github 上发布了一个修复程序。这是提交:

https://github.com/laravel/framework/commit/f41b86018cd3dc09dd5b216e98c3bfabf0653954

基本上你只需要更改 \vendor\laravel\framework\src\Illuminate\Support\Collection.php 中的第 41 行即可

    return new static(is_array($items) ? $items : array($items));

应该这样做:)

【讨论】:

    【解决方案2】:

    在自己遇到这个问题后,我发现 John 给出的答案有效,但需要修改 composer 创建的文件,我认为这不是最终解决方案。

    Garbee 建议实际需要的是将vendor/laralve/lumen-framework 中的config 文件夹复制到根文件夹中

    您必须在应用程序中创建文件夹并将您需要修改的任何配置从框架包复制到其中。

    这样做解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 2021-07-20
      • 2018-08-30
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多