2017-03-12 50 views
1

我有一個型號命名順序:訪問器是不是叫

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Carbon\Carbon; 
class Order extends Model 
{ 
    public function getsystemIdAttribute() 
    { 
     return 99; 
    } 
    public function setCreatedAtAttribute($value){ 
     $this->attributes['createdAt'] = Carbon::parse($value)->format('Y-m-d'); 
    } 
    protected $fillable = ['customerId', 'itemId','systemId', 'createdAt']; 
    public $timestamps = false; 
} 

的問題是,存取 - getsystemIdAttribute()的驚喜是沒有得到所謂的,我試圖在其他領域,但是訪問ISN再次調用。當然,我已將名稱形式getsystemIdAttribute更改爲getitemIdAttribute(例如)。我在另一個模型上覆制了該方法,並再次將該名稱更改了一下,並且它工作正常。我啓動了我的調試器,並訪問了使用這個模型的視圖,令我驚訝的是這個方法沒有被調用,但是返回了數據庫中的字段。 Laravel的版本是5.3,數據庫是MySQL,php的版本是7. 任何想法是我的問題。
編輯: 這裏是駱駝情況下,代碼:

public function getItemIdAttribute($value) 
    { 
     return 99; 
    } 
public function getSystemIdAttribute($value) 
{ 
    return 99; 
} 

但同樣它不能正常工作,它返回從database.Here的數據是從數據庫retriving的數據的方法:

public function read_many($count, $page, $table){ 
     $tbl = Models::determine_table($table); 
     return $tbl::skip(intval($count)*(intval($page)-1))->take(intval($count))->get()->toArray(); 
    } 

這裏是determine_table方法:

public static $tables = [ 'systems' => 'App\System', 
           'orders' => 'App\Order', 
           'notifiers' => 'App\Notifier', 
           'billings' => 'App\Billing', 
           'items' => 'App\Item', 
           'customers' => 'App\Customer', 
           'users' => 'App\User' 
          ]; 
    public static function determine_table($table_input){ 
     foreach(self::$tables as $table=>$class){ 
      if($table_input == $table){ 
       return $class; 
      } 
     } 
     die(); 
    } 

回答

0

你需要寫在studly情況下,方法(如描述here)!

因此,這將是getSystemIdAttribute()getItemIdAttribute()

當現在執行dd(Order::find(1)->system_id);它應該返回99的情況下,你必須在數據庫中的Order對象。

編輯:當使用toArray()時,mutators將不會執行!請查看this comment以獲得一個很好的解釋,它爲什麼會這樣。

+0

不幸的是,更改名稱不起作用。我會更新問題,併發布代碼。 –

+0

試過了,沒有工作。數據也是數據庫中的數據。 –

+0

你如何檢索數據? – manniL