【问题标题】:Error on Model:all() in Laravel 5模型错误:Laravel 5 中的 all()
【发布时间】:2015-03-14 13:19:28
【问题描述】:

你能帮帮我吗?

我刚开始使用 laravel 5,无法让这个简单的 Model:all() 工作。我确定我做错了什么,但我不知道是什么。

这是我所拥有的:

routes.php

Route::get('/', 'PageController@index');

合作伙伴.php

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Partner extends Model {
    protected $table = 'tab_parceiro';
    protected $fillable = '';
    public $timestamps = false;

    protected $primaryKey = 'codigo';
}

PageController.php

<?php namespace App\Http\Controllers;

class PageController extends Controller {

    public function __construct()
    {
    }

    public function index()
    {
        $partners = \App\Partner::all();

        //return view('index', compact('partners'));
    }

}

错误:

[2015-03-14 12:50:22] production.ERROR: exception 'ErrorException' with message 'array_flip() expects parameter 1 to be array, string given' in /home/ubuntu/workspace/storage/framework/compiled.php:9360

表格

| tab_parceiro | CREATE TABLE `tab_parceiro` (
  `CODIGO` int(11) NOT NULL AUTO_INCREMENT,
  `NOME` varchar(200) DEFAULT NULL,
  `ENDERECO` varchar(100) DEFAULT NULL,
  `TELEFONE` varchar(20) DEFAULT NULL,
  `EMAIL` varchar(50) DEFAULT NULL,
  `SITE` varchar(100) DEFAULT NULL,
  `CONTATO` varchar(50) DEFAULT NULL,
  `OBS` text,
  PRIMARY KEY (`CODIGO`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |

视图其实无所谓,因为在调用视图之前就发生了错误。

【问题讨论】:

  • 您传递的是字符串 'partners' 而不是 $partners 变量。
  • 正如我最后所说,对视图的调用并不重要,因为错误发生在此之前,在 Partner::all() 行中(这就是它被评论的原因)。另外,我没有将字符串作为变量传递,我正在压缩它,这很有效。
  • @limonte 该行已被注释掉。它不会对流程产生任何影响。

标签: php laravel model eloquent laravel-5


【解决方案1】:

$fillable 必须是 数组 而不是字符串:

protected $fillable = ['foo', 'bar'];

我在其中放置了一些示例属性(foobar),因为空数组是默认值,您根本不必指定它。无论如何,相当于你的空字符串是:

protected $fillable = [];

【讨论】:

  • 我觉得应该是protected $fillable = [];
  • @HakanAktaş 是的,但空数组是默认值,因此指定它根本没有意义......
  • 那是什么!我知道这是一件非常愚蠢的事情,我没有看到。谢谢!
【解决方案2】:

你正在使用

protected $fillable = '';

但它接受数组,所以它应该是

 protected $fillable = array();

【讨论】:

    【解决方案3】:

    可填充应如下所示:

    protected $fillable = ['NOME', 'ENDERECO', 'TELEFONE', 'EMAIL', 'SITE', 'CONTATO','OBS'];
    

    注意:使用大写的表列名没有任何问题,但我建议将小写作为一个好的约定。

    【讨论】:

    • 是的,我知道表名中的小写字母,但它是另一个将数据添加到此表中的系统,所以我无法控制它。谢谢。
    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2014-01-07
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多