Реляционный поиск таблиц mysql без первичного ключа в yii (вызов нецелого поля) - PullRequest
0 голосов
/ 26 мая 2018

Таблица первая:

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

Таблица вторая:

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

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

Теперь я могу найти его с помощью обычной скриптовой команды mysql, в которой значение $ 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;
}

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

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

Код представления cDetail:

array(
    'name' => 'actId',
    'type'=> 'raw',
    'value' => ActivityRecord::getAR_code($model->actId), 
    'htmlOptions' => array('style' => "text-align:left;"),
),

1 Ответ

0 голосов
/ 26 мая 2018

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...