Laravel:为什么会导致错误 - 调用未定义的方法?

时间:2017-04-02 20:07:02

标签: laravel laravel-5 model eloquent laravel-5.3

为什么在模板中调用带括号的方法会导致错误,但是没有不这样做?那我怎么传递一个参数?

错误:

Call to undefined method Illuminate\Database\Query\Builder::test()

index.blade.php

...
<p class="product-price-old"><s>{{ $product->test("123") }}</s></p>
...

Product.php

...
public function getTestAttribute($value)
{
    return $value;
}
...

但如果我做这样的事情就可以了:

index.blade.php

...
<p class="product-price-old"><s>{{ $product->test }}</s></p>
...

Product.php

...
public function getTestAttribute()
{
    return "123";
}
...

2 个答案:

答案 0 :(得分:2)

如果要将一个Product.php实例(应该是数据库中产品表的模型)分配给刀片变量,并且您的Product表有一个名为“test”的列,那么您只是打印模型中的值和Product.php的实例中没有test()方法。您只需检索test属性的值。

如果要将参数传递给模型中的函数,请为函数使用其他名称。您无法将参数传递给Laravel中的accessor

答案 1 :(得分:1)

void AccelerometerMove() { float x = Input.acceleration.x; Debug.Log("X = " + x); if (x < -0.1f) { MoveLeft(); } else if (x > 0.1f) { MoveRight(); } else { SetVelocityZero(); } } public void SetVelocityZero() { rb.velocity = Vector2.zero; } public void MoveLeft() { rb.velocity = new Vector2( Mathf.Lerp( rb.velocity.x, -speed, Time.deltaTime ), 0); transform.eulerAngles = new Vector2(0, 180); } public void MoveRight() { rb.velocity = new Vector2( Mathf.Lerp( rb.velocity.x, speed, Time.deltaTime ), 0); transform.eulerAngles = new Vector2(0, 0); } accessor,所以它不是真正的功能。它反过来展示了如何获得模型的属性。

这就是你应该使用getTestAttribute方法的原因:

getTestAttribute