我正在尝试根据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;
我正在尝试从我的控制器进行模型实例化时传递所需的值,如下所示。
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;
这意味着如果我触发像 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。
修改
答案 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]);
}
}