Если вы определили отношения между моделями, более чистый и оптимизированный способ может быть таким, как показано ниже.
Я предполагаю, что вы связаны с именем getColor()
внутри вашей модели Persons
. Измените свою функцию personsList()
на следующую.
public function personsList() {
$persons = rsons::find()->with('color')->orderBy('name_person')->all();
return ArrayHelper::map($persons, 'id_person', function($persons) {
return $persons->name_person . ' - ' . $persons->color->name_color;
});
}
Вышеприведенное вернет вам массив, как показано ниже
{
"1": "omer aslam - red",
"2": "irfan ashraf - blue",
"3": "shaban khan - pink",
"4": "rana touqeer - red",
"5": "sajjad - blue"
}
РЕДАКТИРОВАТЬ
Если вы сохраняете несколько цветов для человека, который выглядит иначе, поскольку у вас нет соединительной таблицы, а цвет сохраняется для person
в таблице persons
, но в любом случае, если это one-to-many
, измените функцию обратного вызова внутри ArrayHelper::map()
на ниже так что он показывает вам все цвета, связанные с человеком.
function($persons) {
return $persons->name_person . '-' . implode(",",\yii\helpers\ArrayHelper::getColumn($persons->color, 'name_color'));
}
person
Muhammad Omer Aslam
schedule
19.04.2018
one-to-one
илиone-to-many
к таблицеcolors
означает, что человеку может быть назначен один цвет или несколько - person Muhammad Omer Aslam   schedule 19.04.2018findOne()
, а неfindAll()
, чтобы получить цвет противperson_id
, что показывает, что против человека сохранен только один цвет? Я добавил ответ ниже, посмотрите, поможет ли это. - person Muhammad Omer Aslam   schedule 19.04.2018id_color
в таблицеpersons
, иначе у вас должна быть соединительная таблица, чтобы иметь отношение один ко многим, если я не ошибаюсь - person Muhammad Omer Aslam   schedule 19.04.2018