gpt4 book ai didi

php - 你能在 laravel 中创建一个范围来调用其他各种范围吗?

转载 作者:可可西里 更新时间:2023-10-31 23:52:23 25 4
gpt4 key购买 nike

我在 Laravel 中有一个模型,它定义了各种范围。我想在很多地方使用它们,而不是将它们链接在一起,我宁愿只调用一个调用所有其他范围的范围,如下所示:

function scopeValid($query, $user_id) {
$query = $this->scopeDateValid($query);
$query = $this->scopeMaxUsesValid($query);
$query = $this->scopeCustomerMaxUsesValid($query, $user_id);
return $query;
}

这似乎行不通,有什么办法可以实现吗?

最佳答案

如图the docs ,您需要针对 $query 而不是 $this 进行范围界定,并使用范围的魔术函数而不是调用内部实现:

public function scopeTesting($query) {
return $query->testingTwo();
}

public function scopeTestingTwo($query) {
return $query->where('testing', true);
}

作为演示,您可以在此处看到调用 testing() 范围应用 testingTwo() 范围中的逻辑:

>>> App\User::testing()->toSql();
=> "select * from "users" where "testing" = ?"
>>>

因此,对于您的代码,这应该可以解决问题:

function scopeValid($query, $user_id) {
$query = $query->dateValid();
$query = $query->maxUsesValid();
$query = $query->customerMaxUsesValid($user_id);

return $query;

// or just return $query->dateValid()
// ->maxUsesValid()
// ->customerMaxUsesValid($user_id);
}

关于php - 你能在 laravel 中创建一个范围来调用其他各种范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com