zoukankan      html  css  js  c++  java
  • whereHasIn方法

    model.php文件\

    use IlluminateDatabaseEloquentBuilder;
    use IlluminateDatabaseEloquentRelationsRelation;
    use IlluminateDatabaseEloquentRelationsBelongsTo;
    use IlluminateDatabaseEloquentRelationsHasOne;
    use IlluminateDatabaseEloquentRelationsHasMany;
    /**
    * whereHas 的 where in 实现
    * @param IlluminateDatabaseEloquentBuilder $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 RelationsBelongsTo|RelationsHasOne $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){
    });

  • 相关阅读:
    Python深入02 上下文管理器
    Python深入01 特殊方法与多范式
    Python进阶09 动态类型
    Python进阶08 异常处理
    Python进阶07 函数对象
    Python进阶06 循环对象
    Python进阶05 循环设计
    Python进阶04 函数的参数对应
    Python进阶03 模块
    Python进阶02 文本文件的输入输出
  • 原文地址:https://www.cnblogs.com/JdsyJ/p/11051800.html
Copyright © 2011-2022 走看看