如何将模型功能附加到模型结果

时间:2018-07-07 13:23:12

标签: php laravel model

我有一个Laravel模型和一个函数。需要时,如何将函数附加到模型结果?我不想使用$appends,因为我不需要始终使用该功能。

这是我的模特

class Vendor extends model
    {
        public function status()
        {
           if ($this->active == 1) return 'active';
           else return 'deActive';
        }


}

这是我的控制器,我想要这样的代码:

class VendorController extends Controller
{
    public function info()
    {
        $vendor = Vendor::all();
        $vendor->load('status');
        return $vendor;
    }

    public function infoWithoutStatus()
    {
        $vendor = Vendor::all();
        return $vendor;
    }

}

3 个答案:

答案 0 :(得分:2)

没有任何办法;因为当您在模型中声明函数时,该函数可与该对象一起使用;并在调用函数或附加函数时加载函数结果;为此,您应该编写一个foreach来加载每个对象的值

答案 1 :(得分:0)

class Vendor extends model
{
    public function getStatusAttribute()
    {
       if ($this->active == 1) {
           return 'active';
       } 

       return 'deActive';
    }
}

使用壁虎 https://laravel.com/docs/5.6/eloquent-mutators

答案 2 :(得分:0)

您可以使用追加,但不要将其放在可见集中。

class Vendor extends model
{
    protected $appends = ['status'];
    protected $visible = [];

    public function getStatusAttribute()
    {
       return $this->active ? 'active' : 'deActive';
    }
}

,然后在控制器中像这样使用它:

$vendors = Vendor::all();

// without status field
return $vendors;

// with status field
return $vendors->makeVisible('status');