2016-05-06 31 views
0

我想根據URL字符串爲我的模型中的$ table屬性賦值。在那裏我得到「數組到字符串轉換」錯誤。以下是代碼級別詳細信息。有人可以幫忙嗎?謝謝。Laravel 4.2數組到字符串轉換錯誤

我編寫了我的模型__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; 
 

 
    } 
 

 
}

我想,如下圖所示,從我的控制器通過,同時模型實例所需的值。

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]); 
 
     
 
    } 
 
     
 
    } 
 
}

這意味着,如果我觸發一個URL像www.example.com/floods/city我的模型應該建表爲「city_floods」,這是我們下面的命名約定。 而且,我觀察到表名正在正確構建,但拋出此錯誤。奇怪的是我的代碼工作正常時,我硬編碼這個表名。即

$ this-> table =「city_floods」正常,但 $ this-> table = $ disasterArea。 '_'。 $災難不。我不明白有什麼區別。有人可以建議我在哪裏做錯了。

我使用Laravel 4.2框架在UBUNTU 14.04上工作。

編輯

enter image description here

+0

嘗試在'__construct'中記錄變量,然後將其分配給t能夠。然後你可以看到究竟傳遞了什麼。 – aynber

+0

@aynber你的意思是顯示變量? –

+0

是的。 'Log :: info($ disasterArea);'會將變量寫入您的日誌文件中,這通常存儲在app/storage/logs中。 – aynber

回答

0

但是你不能以這種方式傳遞數據,以雄辯模型,因爲原來的抽象模型口才擁有的第一個參數爲array!它會試圖用這種方式來表達。

編輯

正如你可以看到你的屏幕截圖 - 模型與方法newInstance什麼意思,它試圖把(propably)的空數組你串varible地方解決。

解決方案

最好的辦法是將邏輯分成擴展的主要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]); 

    } 
} 
+0

ok我告訴你爲什麼我這樣做。我們正在構建一種博客類應用程序,在其中顯示與不同地區/國家/地區的災難有關的帖子。爲此,我需要訪問多個表。我不想爲每個表格創建新的模型。你可以建議有沒有適當的替代方法來處理一個Disaster.php模型中的所有表? –

+0

我會寫上面的。 –

+0

好的。謝謝.. –