码迷,mamicode.com
首页 > 其他好文 > 详细

whereHasIn方法

时间:2019-06-19 16:38:32      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:tab   traints   callable   RKE   var   hasone   throws   ble   constrain   

model.php文件\\

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* whereHas 的 where in 实现
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param string $relationName
* @param callable $callable
* @return Builder
*
* @throws Exception
*/
public function scopeWhereHasIn(Builder $builder, $relationName, callable $callable)
{
$relationNames = explode(‘.‘, $relationName);
$nextRelation = implode(‘.‘, array_slice($relationNames, 1));

$method = $relationNames[0];
/** @var Relations\BelongsTo|Relations\HasOne $relation */

$relation = Relation::noConstraints(function () use ($method) {
return $this->$method();
});

/** @var Builder $in */
if($nextRelation){
$in = $relation->getQuery()->whereHasIn($nextRelation, $callable);
} else {
$in = $relation->getQuery()->where($callable);
}
if ($relation instanceof BelongsTo) {
return $builder->whereIn($relation->getForeignKey(), $in->select($relation->getOwnerKey()));
} elseif ($relation instanceof HasOne) {
return $builder->whereIn($this->getKeyName(), $in->select($relation->getForeignKeyName()));
} elseif ($relation instanceof HasMany){
return $builder->whereIn($this->getKeyName(), $in->select($relation->getForeignKeyName()));
}

throw new \Exception(__METHOD__ . " 不支持 " . get_class($relation));
}

使用 ----- User::where()->whereHasIn(‘goods‘, function($query){
});

whereHasIn方法

标签:tab   traints   callable   RKE   var   hasone   throws   ble   constrain   

原文地址:https://www.cnblogs.com/JdsyJ/p/11051800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!