2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
我找到了一個(gè)解決方案來(lái)進(jìn)行不可能的查詢,該查詢將返回 0 結(jié)果。
public function apply(Builder $builder, Model $model)
{
$input = $this->getAuthValues(get_class($model));
if (count($input) < 1) {
$builder->whereRaw('1 = 0');
return;
}
$jsonQuery = new JsonQuery($builder, $input);
$jsonQuery->search();
}

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
由于作用域通常是鏈接的(稱為流暢),并且作用域不直接負(fù)責(zé)執(zhí)行查詢,因此我認(rèn)為您不能“優(yōu)雅地退出”,因?yàn)橄乱粋€(gè)調(diào)用仍然需要一個(gè)對(duì)象來(lái)處理Builder。
一種可能的解決方案(并不簡(jiǎn)單)是創(chuàng)建一個(gè)擴(kuò)展該類的類Builder,并重寫負(fù)責(zé)實(shí)際從數(shù)據(jù)庫(kù)獲取結(jié)果的所有方法。我不確定您需要重寫的所有方法才能在所有情況下都沒(méi)有錯(cuò)誤地工作。您可能還想處理其中的一些插入和更新情況AbortedBuilder。
class AbortedBuilder extends Builder
{
...
/**
* Run the query as a "select" statement against the connection.
*
* @return array
*/
protected function runSelect()
{
return [];
}
...
/**
* Run a pagination count query.
*
* @param array $columns
* @return array
*/
protected function runPaginationCountQuery($columns = ['*'])
{
return [];
}
...
/**
* Insert a new record and get the value of the primary key.
*
* @param array $values
* @param string|null $sequence
* @return int
*/
public function insertGetId(array $values, $sequence = null)
{
throw new \Exception('You are trying to insert using an aborted query!');
}
...
}
然后在你的范圍內(nèi)你可以這樣做:
public function apply(Builder $builder, Model $model)
{
$input = $this->getAuthValues(get_class($model));
if (count($input) < 1) {
$builder = new AbortedBuilder();
} else {
$jsonQuery = new JsonQuery($builder, $input);
$jsonQuery->search();
}
- 2 回答
- 0 關(guān)注
- 163 瀏覽
添加回答
舉報(bào)