【问题标题】:Laravel scope method error when call on variable调用变量时Laravel范围方法错误
【发布时间】:2022-01-10 02:16:01
【问题描述】:

我的模型类别中有一个方法 scoup scopeCalculateMaxPositionSelectedCategory

class Category extends Model
{
    use HasFactory;

    protected $fillable = [
        'parent_id',
        'name',
        'slug',
        'description',
        'position',
        'quantity_available_offers',
    ];

    public function scopeCalculateMaxPositionSelectedCategory($query, $cat_id = null) {
        return $query->where('parent_id', $cat_id)->max('position');
    }
}

当我这样打电话时,它工作正常:

 Category::CalculateMaxPositionSelectedCategory();

但我想这样做:

$this->categories->CalculateMaxPositionSelectedCategory();

在此之后是错误: “坏方法调用异常 方法 Illuminate\Database\Eloquent\Collection::CalculateMaxPositionSelectedCategory 不存在。 "

告诉我为什么要这样做,因为我想在组件 Livewire 中使用它:

    public $selCategory = '';
    public $categories;
    public $selPosition;

    public function render()
    {
        $this->categories = Category::all();
        $this->selPosition = $this->categories->CalculateMaxPositionSelectedCategory() + 1;

        return view('livewire.form-stor-category');
    }

假设错误是由于all()调用get()造成的。但我不知道如何解决它。

【问题讨论】:

  • 如果all() 有问题,您可以随时使用query()

标签: laravel laravel-livewire livewires


【解决方案1】:

$this->categories->CalculateMaxPositionSelectedCategory();

^ 此行将类别作为集合获取,然后您无法在集合上调用查询范围。

试试这个:

$this->categories()->CalculateMaxPositionSelectedCategory()->get();

类别之后的() 将继续构建查询,但不会运行它。当您在没有 () 的情况下调用 $this->categories 时,它会立即运行查询,而您使用范围的机会就消失了。

【讨论】:

  • 当我使用$this->categories()->CalculateMaxPositionSelectedCategory()->get(); 时出现错误方法 App\Http\Livewire\FormStorCategory::categories 不存在。它有点接近但仍然不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多