Реляционный поиск таблиц mysql без первичного ключа в yii (вызов нецелого поля)

0

Таблица 1:

ar_codes
----------
ar_id (primary key),
act_id,
ar_code,
status

Таблица 2:

act_req_recv
----------
rcv_id (primary key),
act_id,
rcv_person,
status

Теперь мне нужно найти ar_code значение поля из таблицы ar_codes для rcv_person области act_req_recv таблицы. Обе таблицы имеют одно общее поле, которое является act_id и не является первичным ключом для обеих таблиц.

Теперь я могу найти его с помощью обычной команды mysql scriptlike ниже, где $ actId несет значение. Как я могу найти это значение в Yii?

SELECT ar_code FROM ar_codes WHERE act_id=$actId

Я попытался найти это с вызовом функции из модели. Но поскольку поле не является PK, результат не наступает.

public static function getAR_code($actId) {
    $ActCode = Yii::app()->db->createCommand()
            ->select('ar_code')
            ->from('{{ar_codes}}')
            ->where('act_id=' . (int) $actId)
            ->queryAll();
    return $ActCode;
}

Получение этой ошибки при запуске функции:

[ошибка] [php] Преобразование массива в строку (D:\Xampp\htdocs\framework\yii1.1.19\zii\widgets\CDetailView.php: 240)

Код cDetail View:

array(
    'name' => 'actId',
    'type'=> 'raw',
    'value' => ActivityRecord::getAR_code($model->actId), 
    'htmlOptions' => array('style' => "text-align:left;"),
),
  • 0
    Можете ли вы показать свое мнение с CDetailView ? Запрос выглядит нормально, возможно, вы неправильно используете результат.
  • 0
    Код cDetailview был добавлен.
Теги:
yii

1 ответ

0
Лучший ответ

queryAll() возвращает массив строк, поэтому он фактически является массивом массивов. Что-то вроде:

[
    ['ar_code' => 123],
]

Если вы хотите запросить одно значение (например, 123), вы должны использовать queryScalar() - он вернет значение из первого столбца первой строки:

public static function getAR_code($actId) {
    return Yii::app()->db->createCommand()
            ->select('ar_code')
            ->from('{{ar_codes}}')
            ->where('act_id=' . (int) $actId)
            ->queryScalar();
}
  • 0
    Большое спасибо @ rob006. Вопрос был решен.
  • 0
    @RaihanSabuj Если это работает для вас, отметьте ответ как принятый.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню