AR num_rows fetch_assoc

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
gv0zd
Сообщения: 114
Зарегистрирован: 2012.03.28, 10:00

AR num_rows fetch_assoc

Сообщение gv0zd »

обычная при работе с mysql, если хотел убедиться, что существует только одна запись и после этого хотел ее использовать, делал так

Код: Выделить всё

$query = mysql_query("Select...");
$row = (mysql_num_rows == 1) ? mysql_fetch_assoc($query) : false; 
как то же самое сделать с помощью AR?

Код: Выделить всё

$user->model()->find() 
Возваращает только один ряд, даже если критерию поиска отвечают много

Код: Выделить всё

count($user->model()->findAll()) 
Нормально счиат количество записей, но как получить в качестве объекта эту самую единаственную запись, внести в нее изменения и сохранить?

На данный момент единственное решение что я вижу

Код: Выделить всё

if($user->model()->count() == 1)
    $user->model()->find() 
Но как-то странно для таких целей использовать 2 запроса
Подскажите. как поступить
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: AR num_rows fetch_assoc

Сообщение SpiLLeR »

Все проверки сами поставите:

Код: Выделить всё

$models = $user->model()->findAll();
$models[0] - 1st element
Предупрежден - значит вооружен.
devKP.ru
gv0zd
Сообщения: 114
Зарегистрирован: 2012.03.28, 10:00

Re: AR num_rows fetch_assoc

Сообщение gv0zd »

Я понимаю что так можно сделать

Т.е. дальше за собой таскать
$model[0]->ff='sgsgsdg';
$model[0]->zz='ssdggshsgh';
$model[0]->save();

Или после подсчета рядов делать
$model=$model[0]
Т.е. такой вариант с точки зрения yii является тру?
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: AR num_rows fetch_assoc

Сообщение SpiLLeR »

Я ни очень понимаю зачем убеждаться в том, что существует только одна запись. Задача непонятна...
Можно конечно сделать $model = $models[0];
Предупрежден - значит вооружен.
devKP.ru
gv0zd
Сообщения: 114
Зарегистрирован: 2012.03.28, 10:00

Re: AR num_rows fetch_assoc

Сообщение gv0zd »

Данные в эту таблицу записываю не я
Уверенности что поле, по которому я делаю запрос будет уникальным и не будет повторяться у меня нет

Если записей несколько то это ошибка
И при ошибке продолжать действия с одной из записей имхо неправильно. лучше высветить пользователю error и занести в лог, после этого разобратьс с ошибкой
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: AR num_rows fetch_assoc

Сообщение anton44eg »

используй валидатор unique
gv0zd
Сообщения: 114
Зарегистрирован: 2012.03.28, 10:00

Re: AR num_rows fetch_assoc

Сообщение gv0zd »

Насколко я понимаю, валидатор unique используется при добавлении данных в таблицу
Я же ничего не добавляю туда, только select делаю
alexZT
Сообщения: 362
Зарегистрирован: 2012.03.06, 11:33
Откуда: Украина/Житомир
Контактная информация:

Re: AR num_rows fetch_assoc

Сообщение alexZT »

не совсем понятна задача, если нужно получать только одну строку данных, но можно получить и две и в зависимости от кол-ва выполнить действия - это одно, если данные в базе не должны дублироваться, то почему бы сразу в базе поле не сделать ключевым и уникальным? тогда данные дублирующиеся нельзя будет внести в базу и соответственно в запрос будет приходить только один ответ. Так же для таких дел существует findByPk чтоб уже наверняка получать единую запись.
я человек и мне свойственно ошибаться
[email protected]
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: AR num_rows fetch_assoc

Сообщение aser »

gv0zd писал(а):Т.е. такой вариант с точки зрения yii является тру?
Да в принципе да, единственное поставьте в запрос limit 2 так запрос перестанет проходить остальную часть таблицы если уже найдет 2 записи, что явно ускорит выполнение на большем объеме данных. А так в таком решении ничего страшного не вижу.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: AR num_rows fetch_assoc

Сообщение anton44eg »

с помощью unique можно избежать неправильного ввода в таблицу - следовательно, избавиться от проблемы с выборкой
Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: AR num_rows fetch_assoc

Сообщение resurtm »

anton44eg писал(а):с помощью unique можно избежать неправильного ввода в таблицу - следовательно, избавиться от проблемы с выборкой
Ещё и индекс типа UNIQUE в самой таблице в СУБД можно добавить.
gv0zd
Сообщения: 114
Зарегистрирован: 2012.03.28, 10:00

Re: AR num_rows fetch_assoc

Сообщение gv0zd »

Всем спасибо за помощь
alexZT писал(а):не совсем понятна задача, если нужно получать только одну строку данных, но можно получить и две и в зависимости от кол-ва выполнить действия - это одно, если данные в базе не должны дублироваться, то почему бы сразу в базе поле не сделать ключевым и уникальным? тогда данные дублирующиеся нельзя будет внести в базу и соответственно в запрос будет приходить только один ответ. Так же для таких дел существует findByPk чтоб уже наверняка получать единую запись.
anton44eg писал(а):с помощью unique можно избежать неправильного ввода в таблицу - следовательно, избавиться от проблемы с выборкой
Я написал выше, что таблица такая какая есть и данные я в нее не могу вставлять, изменять ее структуру тоже
Я из нее только могу делать selectы
Такие вводные данные.

Отсюда и возник вопрос
Ответить