RedBeanPHP\QueryWriter\AQueryWriter::queryRecordRelated PHP 메소드

queryRecordRelated() 공개 메소드

또한 보기: QueryWriter::queryRecordRelated
public queryRecordRelated ( $sourceType, $destType, $linkIDs, $addSql = '', $bindings = [] )
    public function queryRecordRelated($sourceType, $destType, $linkIDs, $addSql = '', $bindings = array())
    {
        $addSql = $this->glueSQLCondition($addSql, QueryWriter::C_GLUE_WHERE);
        list($sourceTable, $destTable, $linkTable, $sourceCol, $destCol) = $this->getRelationalTablesAndColumns($sourceType, $destType);
        $key = $this->getCacheKey(array($sourceType, $destType, implode(',', $linkIDs), $addSql, $bindings));
        if ($this->flagUseCache && ($cached = $this->getCached($destType, $key))) {
            return $cached;
        }
        $inClause = $this->getParametersForInClause($linkIDs, $bindings);
        $sqlFilterStr = '';
        if (count(self::$sqlFilters)) {
            $sqlFilterStr = $this->getSQLFilterSnippet($destType);
        }
        if ($sourceType === $destType) {
            $inClause2 = $this->getParametersForInClause($linkIDs, $bindings, count($bindings));
            //for some databases
            $sql = "\n\t\t\tSELECT\n\t\t\t\t{$destTable}.* {$sqlFilterStr} ,\n\t\t\t\tCOALESCE(\n\t\t\t\tNULLIF({$linkTable}.{$sourceCol}, {$destTable}.id),\n\t\t\t\tNULLIF({$linkTable}.{$destCol}, {$destTable}.id)) AS linked_by\n\t\t\tFROM {$linkTable}\n\t\t\tINNER JOIN {$destTable} ON\n\t\t\t( {$destTable}.id = {$linkTable}.{$destCol} AND {$linkTable}.{$sourceCol} IN ({$inClause}) ) OR\n\t\t\t( {$destTable}.id = {$linkTable}.{$sourceCol} AND {$linkTable}.{$destCol} IN ({$inClause2}) )\n\t\t\t{$addSql}\n\t\t\t-- keep-cache";
            $linkIDs = array_merge($linkIDs, $linkIDs);
        } else {
            $sql = "\n\t\t\tSELECT\n\t\t\t\t{$destTable}.* {$sqlFilterStr},\n\t\t\t\t{$linkTable}.{$sourceCol} AS linked_by\n\t\t\tFROM {$linkTable}\n\t\t\tINNER JOIN {$destTable} ON\n\t\t\t( {$destTable}.id = {$linkTable}.{$destCol} AND {$linkTable}.{$sourceCol} IN ({$inClause}) )\n\t\t\t{$addSql}\n\t\t\t-- keep-cache";
        }
        $bindings = array_merge($linkIDs, $bindings);
        $rows = $this->adapter->get($sql, $bindings);
        $this->putResultInCache($destType, $key, $rows);
        return $rows;
    }