需求:查找生效中的臨時角標,有則返回,否則返回長期角標。
代碼實現:
$corner_mark = [];
$corner_mark_id = 0;
$model->cornerMark->each(function ($relationValue) use (&$corner_mark, &$corner_mark_id) {
if ($relationValue->validity_type == 2 &&
$relationValue->validity_start <= date('Y-m-d H:m:s') &&
$relationValue->validity_end >= date('Y-m-d H:m:s')) {
// 生效中的臨時角標
$corner_mark = $relationValue->only('title', 'image', 'group');
$corner_mark_id = $corner_mark->id ?? 0;
return false;
} elseif ($relationValue->validity_type == 1) {
// 長期角標
$corner_mark = $relationValue->only('title', 'image', 'group');
$corner_mark_id = $corner_mark->id ?? 0;
return false;
}
});
each源碼分析:each 函數用 return false 中斷。
/**
* Execute a callback over each item.
*
* @param callable $callback
* @return $this
*/
public function each(callable $callback)
{
foreach ($this->items as $key => $item) {
if ($callback($item, $key) === false) {
break;
}
}
return $this;
}