访问者未被称为

时间:2017-03-12 21:57:54

标签: php mysql eloquent laravel-5.3

我有一个名为Order的模型:

<?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()没有被调用,我在其他字段上尝试过,但是访问器没有被再次调用。当然我已经将名称格式getsystemIdAttribute更改为getitemIdAttribute(for例)。我在另一个模型上复制了该方法,并再次更改了名称并且它有效。我启动了我的调试器,并访问了使用此模型的视图,令我惊讶的是,该方法未被调用,但返回了数据库中的字段。 Laravel的版本是5.3,数据库是MySQL,php的版本是7。  知道我的问题是什么。
编辑: 以下是驼峰案例中的代码:

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

但它再次无效,它正在从数据库返回数据。这是从数据库中重新获取数据的方法:

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

1 个答案:

答案 0 :(得分:0)

您需要在studly案例中编写方法(如here所述)!

所以它会是getSystemIdAttribute()getItemIdAttribute()

当你现在执行dd(Order::find(1)->system_id);时,如果你在数据库中有一个Order对象,它应该返回99.

编辑:使用toArray()时,不会执行mutators!请查看this comment以获得有关此类目的的详细解释。