php, sql , получить данные в той же таблице по индификатору
у меня есть данная таблица
class AjaxController extends Controller
{
public function actionLocality()
{
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->get();
$s = trim($data['keyword']);
$locality = Locality::find()->select(['title', 'type'])
->where(['like', 'title', $s])
->asArray()
->all();
if (!empty($locality)) {
return JSON::encode($locality);
}
}
return JSON::encode(null);
}
}
столбец partner_id хранит индификаторы(id) этой же таблицы
Я хочу получить также информацию по parent_id
Для примера: я хочу получить информацию по ID 51, у него parent_id 30110, то также взять и информацию по данному индификатору(30110)
Не делая циклов , а если можно одним запросом (если это возможно)
Ответы (1 шт):
В модель таблицы добавь метод:
public function getParent()
{
return $this->hasOne(self::className,['id' =>'parent_id']);
}
Потом в нужном месте вызываешь:
$locality ->parent->title
Ну или в виджетах:
parent.title
Единственное, убери asArray() из запроса. Тогда сможешь обращаться к объекту $locality. Теперь сможешь получать в месте с обьектом $locality под id =51, объект под id=30110. А также смотреть у объекта id=30110 его parentId. Выглядеть будет
parent.parent.title
Yii поддерживает кучу уровней вложенности. А если нужно будет перевести в массив используй ArrayHelper.
$locality = Locality::find()
->where(['like', 'title', $s])
->all();
if (!empty($locality)) {
return JSON::encode(
ArrayHelper::toArray($locality, [
'app\models\Locality' => [
'id',
'title',
'parent.id',
'parent.title',
'parent.parent_id', //Если нужно вывести другие аттрибуты 30110
'length' => function ($locality) {
return strlen($locality->id);
},
],
])
);
}
