You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.4 KiB
75 lines
1.4 KiB
<?php |
|
|
|
/* |
|
* This file is part of the overtrue/wechat. |
|
* |
|
* (c) overtrue <i@overtrue.me> |
|
* |
|
* This source file is subject to the MIT license that is bundled |
|
* with this source code in the file LICENSE. |
|
*/ |
|
|
|
namespace EasyWeChat\Kernel\Clauses; |
|
|
|
/** |
|
* Class Clause. |
|
* |
|
* @author mingyoung <mingyoungcheung@gmail.com> |
|
*/ |
|
class Clause |
|
{ |
|
/** |
|
* @var array |
|
*/ |
|
protected $clauses = [ |
|
'where' => [], |
|
]; |
|
|
|
/** |
|
* @param mixed ...$args |
|
* |
|
* @return $this |
|
*/ |
|
public function where(...$args) |
|
{ |
|
array_push($this->clauses['where'], $args); |
|
|
|
return $this; |
|
} |
|
|
|
/** |
|
* @param mixed $payload |
|
* |
|
* @return bool |
|
*/ |
|
public function intercepted($payload) |
|
{ |
|
return (bool) $this->interceptWhereClause($payload); |
|
} |
|
|
|
/** |
|
* @param mixed $payload |
|
* |
|
* @return bool |
|
*/ |
|
protected function interceptWhereClause($payload) |
|
{ |
|
foreach ($this->clauses['where'] as $item) { |
|
list($key, $value) = $item; |
|
|
|
if (!isset($payload[$key])) { |
|
continue; |
|
} |
|
|
|
if (is_array($value) && !in_array($payload[$key], $value)) { |
|
return true; |
|
} |
|
|
|
if (!is_array($value) && $payload[$key] !== $value) { |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
}
|
|
|