*/ public function get(array $condition): Collection { $table = User::getBuilder(static::TABLE_USER); $table->joinSub(Contract::getBuilder(), static::TABLE_CONTRACT, function (JoinClause $join) { $join->on( $this->makeColumnName([static::TABLE_USER, User::COL_NAME_CONTRACT_ID]), $this->makeColumnName([static::TABLE_CONTRACT, Contract::COL_NAME_ID]) ); }); // -----検索条件 // ID $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_ID])); // 名前 $name = data_get($condition, static::CONDITION_NAME); if ($name) { $table->where($this->makeColumnName([static::TABLE_USER, User::COL_NAME_NAME]), 'like', "%{$name}%"); } // EMAIL $email = data_get($condition, static::CONDITION_EMAIL); if ($email) { $table->where($this->makeColumnName([static::TABLE_USER, User::COL_NAME_EMAIL]), 'like', "%{$email}%"); } // 契約ID $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_CONTRACT_ID])); $table->select($this->columns()); $main = DB::table($table, "main"); // ソート $this->sort($main, $condition); $main->orderBy(static::CONDITION_ID); // リミット $this->limit($main, $condition); return LoginUserRepositoryData::makeList($main->get()); } private function columns() { $user = static::TABLE_USER; $contract = static::TABLE_CONTRACT; $columns = [ $this->makeColumnNameForSelect([$user, User::COL_NAME_ID]), $this->makeColumnNameForSelect([$user, User::COL_NAME_NAME]), $this->makeColumnNameForSelect([$user, User::COL_NAME_ROLE]), $this->makeColumnNameForSelect([$user, User::COL_NAME_EMAIL]), // 契約とログイン情報の大きい方 DB::raw( sprintf( 'GREATEST("%s"."%s","%s"."%s") as updated_at', $user, User::COL_NAME_UPDATED_AT, $contract, Contract::COL_NAME_UPDATED_AT, ) ), ]; return $columns; } }