Так к сожалению не сработало, Expected: Array(String). Got: String, что логично т.к. на одну запись в таблице может быть много записей в nested-колонке.
Максим Тимофеев: Почти.
> The value returned will be the first column in the first row of the query results.
То есть годится только чтобы получить первое значение первой строки. А хотелось бы получать первое значение каждой строки (в цикле само собой). То есть полный аналог PDO fetchColumn.
Максим Федоров: "В ActiveQuery есть "аналог" PDO'шного fetch - метод each, но есть ли таковой для fetchColumn?" Разница в том, что each, как и fetch вернёт массив. Из одного элемента или из десяти не важно, это будет массив. В вашем примере это будет так:
$query->select(['id']);
foreach ($query->each() as $data) {
assert(is_array($data); // ['id'=>123]
assert(is_numeric($data['id']));
doIt($data['id']);
}
Я же хочу выяснить можно ли сделать как-то так:
$query->select(['id']);
foreach ($query->fetchColumn() as $id) {
assert(is_numeric($id)); // 123
doIt($id);
}
Если нельзя, то придётся делать по первому сценарию, но если можно, то зачем мне лишний массив.
Окей, заменяем ActiveQuery на Query и повторяем вопрос. Мне нужна выборка не в виде массива, а в виде итератора. Колонка, которую нужно прочитать может, например, в память не помещаться. В случае fetch и fetchColumn php будет поштучно читать данные из result set'а mysql, а не копировать всё это в памяти.
Dmitry Pavlov: ну теперь всё просто: делаем со стилями что угодно, удаляем /css/min.css (можно автоматом) и готово, он сгенерируется заново. При этом даже не нужно думать о том, что на странице подключен этот min.css, а не все остальные. Объяснил это верстальщице и все счастливы. У нас правки по вёрстке/дизайну обычно идут от трёх месяцев до полугода с момента "готовности" этой самой вёрстки каждую неделю и после каждой такой правки править вручную одни и те-же вещи выйдет для компании дороже, а часы на автоматизацию окупятся через пару недель полностью.
Dmitry Pavlov: там битых ссылок выходят десятки. И вот они найдены, что дальше делать? Вручную править? При каждой сборке? Обновили плагин какой и всё по-новой?
В общем оно регуляркой и решилось.
mletov: проблема по-большей части в том, чтобы составить такую чудо-регулярку, которая бы просто нашла эти пути в файле. А уж написать код, который бы пробежался по файлам и всё корректно заменил (с проверкой существуют ли вообще файлы по этим путям) работа на полчаса.
Роман Краббз: Что же все такие умные-то, а вопросы читать не умеют. Мне не не строку "qwerty/asdf.jpg" на "zxcv/asdf.jpg" поменять, а любые относительные пути на абсолютные. Посмотрел бы я что вы напишете в "что искать". Наверное "any relative path". Искусственный интеллект-то уже в каждом редакторе кода встроен, чё.
Решение по ссылке пропускает самый важный момент — как программно найти в css любые пути. Они не всегда содержат в себе точки/слеши. Не всегда обёрнуты в url() или, хотябы, в кавычки.
Может быть стоит собрать полный список всех css-токенов и искать слова из букв, цифр, слешей и хотя-бы одной точки, но без пробелов, затем пытаться вычислить абсолютный путь до них и, если такой файл существует, значит это действительно путь.
Смысл в том, что все эти плагины лежат на своих местах в оригинальном виде. Просто стили из них с некоторыми правками автоматически копируются в один, который уже и подключается на страницах.
Интересно, как-же с помощью Ctrl+F->Replace заменять совершенно разные пути? Где-то это ./dir/file где-то просто file, где-то ../dir/file, где-то dir/file. При этом dir и file везде какие угодно.
В случае ./* и ../* оно понятно, а в других уже не совсем. Особенно дело осложняет то, что не везде так-то просто вообще определить программно, что это именно путь. Например, если он в конструкции url(), то это одно дело, а если просто так (даже без кавычек), то уже совсем другое. В итоге, получается, нужно писать почти полноценный css-парсер.
Я имею в виду при подключении к wi-fi сети, но до передачи целевого трафика в сеть. То есть, условно говоря, "человек дозвонился, ему ответили, но он пока молчит/передаёт что-то служебное". Или на примере http: tcp-соединение установлено, но ни одного заголовка (хотя может быть) и, тем более, данных ещё не передано.
Совсем забыл, что php может сам выводить все свои ошибки)
В общем там печаль: require пустой строки в недрах /protected/framework/yiilite.php, придётся ковыряться как-же так вышло.
Нельзя ли проверить количество/наличие результатов в выборке более лаконичным способом, чем перебором со счётчиком? В крайнем случае вынести это в отдельную функцию, принимающую выборку и отдающую количество результатов.
А так да, намного лучше.