在追加参数时如何将其传递给laravel getAttribute

w41d8nur  于 2023-02-10  发布在  其他
关注(0)|答案(3)|浏览(191)

这是我的laravel自定义访问器,我将使用它附加

protected $appends = [leave_balances];

public function getLeaveBalancesAttribute() {
    // some code
}

我希望在调用此访问器时传递一个参数,如下所示

public function getLeaveBalancesAttribute($parameter) {
        // use $parameter here
}

$payslip = Payslip::find(1);
\Log::debug($payslip->leave_balances("PARAMETER"));

我已经搜索,发现这是不可能的。请有人能提供任何解决方案,我需要通过这个参数。

lg40wkob

lg40wkob1#

除非你想让它作为一个属性,否则你不会附加属性,
你可以只创建一个方法,因为你像方法一样调用它
在工资单模型中

public function leaveBalances( $params ) { 
    return $params
}

你就可以把它当作

$payslip = Payslip::find(1);
$payslip->leaveBalances("PARAMETER") // which output PARAMETER
u0njafvf

u0njafvf2#

如果您声明了一个属性,则只能按如下方式使用它(遵循您的示例:

protected $appends = ['leave_balances'];

public function getLeaveBalancesAttribute()
{
    return 'Hi!';
}

$payslip = Payslip::find(1);

$value = $payslip->leave_balances;

dd($value); // This will output string(Hi!)

您(我认为)需要的是setLeaveBalancesAttribute,因此您可以传递一个值并对它执行任何您想要的操作:

public function setLeaveBalancesAttribute($parameter)
{
    return $parameter.' Yes!';
}

$payslip = Payslip::find(1);

$payslip->leave_balances = 'It works!';

dd($payslip->leave_balances); // This will output string(It works! Yes!)

但是,如果您使用的是Laravel 9+,请务必使用新的定义属性的方式,这样会更好。

w8biq8rn

w8biq8rn3#

你可以在有访问器的模型中设置属性$appends,类似于:

protected $appends = ['the name of accessor'];

然而,我认为这将是您对所声明的模型所做的大多数响应或查询。
另一个选项是使用::find方法创建模型的单个示例。例如:

$model_instance = Model::find($id);
$attribute = $model_instance->attribute;

以下是文档参考:https://laravel.com/docs/9.x/eloquent-mutators#defining-an-accessor

相关问题