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

  • 相关阅读:
    shiro (java安全框架)
    day13
    自己修改select的样式(修改select右边的小三角)
    如何让2个并列的div根据内容自动保持同等高度
    js定时显示广告代码
    jquery 模块拖拽
    JS获取浏览器可视区域尺寸
    jQuery事件绑定的最佳实践
    flot图插件使用
    计算json的和
  • 原文地址:https://www.cnblogs.com/JdsyJ/p/11051800.html
Copyright © 2011-2022 走看看