whereHasIn方法

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){
});

转载于:https://www.cnblogs.com/JdsyJ/p/11051800.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值