Laravel 4.2数组到字符串转换错误

时间:2016-05-06 12:48:40

标签: php laravel-4 ubuntu-14.04

我正在尝试根据URL字符串为我的Model中的$ table属性赋值。在那里我得到"数组到字符串转换"错误。以下是代码级详细信息。有人可以帮忙吗?谢谢。

我已经编写了我的模型__constructor(),如下所示。



<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class Disaster extends Eloquent {

    use UserTrait,
        RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table;

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');

    public function __construct($disasterArea, $disaster = "flood") {

               $this->table = $disasterArea . '_' . $disaster;

    }

}
&#13;
&#13;
&#13;

我正在尝试从我的控制器进行模型实例化时传递所需的值,如下所示。

&#13;
&#13;
class DisasterController extends \BaseController {

    public function getFloodTweets($floodArea){
        $flood = new Disaster($floodArea, "floods");
        $floodTweets = $flood->orderBy('created_at','desc')->groupBy('tweets')->paginate(10);
        $floodAreaUc = ucfirst($floodArea);
        return View::make("disaster.floodTweets",['title'=>"$floodAreaUc Flood",'floodTweets'=>$floodTweets,'floodArea'=>$floodAreaUc]);
        
    }
        
    }
}
&#13;
&#13;
&#13;

这意味着如果我触发像 www.example.com/floods/city 这样的网址,我的模型应该将表格构建为&#39; city_floods&#39;这是我们遵循的命名惯例。 而且,我观察到表名正在构建正确但抛出此错误。奇怪的是,当我对这个表名进行硬编码时,我的代码工作正常。即

$ this-&gt; table =&#34; city_floods&#34;工作正常但是 $ this-&gt; table = $ disasterArea。 &#39; _&#39; 。 $灾难没有。我不明白有什么区别。有人可以建议我做错了。

我使用Laravel 4.2框架处理UBUNTU 14.04。

修改

enter image description here

1 个答案:

答案 0 :(得分:0)

那么你不能以这种方式将数据传递给雄辩的模型,因为原始的抽象雄辩模型的第一个参数为array!并试图以这种方式表达它。

修改

正如您在屏幕截图中看到的那样 - 模型正在使用newInstance方法解析,这意味着它试图将(可行地)一个空数组放入字符串变量中。

解决方案

最好的选择是将逻辑拆分为几个灾难模型,扩展主Disaster模型并从工厂解决它们:

class UsaFloodDisaster extends Disaster
{
    protected $table = 'usa_flood';
}

class FranceFloodDisaster extends Disaster
{
    protected $table = 'france_flood';

}

(...)

class DisasterFactory
{
    public function make($area, $disaster = 'flood')
    {
        $className = ucfirst(camel_case($area.'_'.$disaster));

        return app($className);
    }

}

然后你的控制器看起来像:

class DisasterController extends \BaseController {

    public function getFloodTweets($floodArea){
        $flood = app(DisasterFactory::class)->make($floodArea, "floods");
        $floodTweets = $flood->orderBy('created_at','desc')->groupBy('tweets')->paginate(10);
        $floodAreaUc = ucfirst($floodArea);
        return View::make("disaster.floodTweets",['title'=>"$floodAreaUc Flood",'floodTweets'=>$floodTweets,'floodArea'=>$floodAreaUc]);

    }
}