@DragonChris
Junior full stack)

Как, в моем случае, сделать поиск в CRUD приложении на yii2?

Я пишу CRUD Приложени. Я хочу сделать поиск по полям с join.
Мой код в модели

public function getIdVacancy() {
                return $this->status->id_vacancy;
            }


И мой код в модели поиска, это работает

$query->joinWith(['status' => function ($q) {
                $q->where('status.id_vacancy LIKE "%' . $this->idVacancy . '%"');
            }]);


Это мой запрос значения в модели(проблема)

public function getVacancyNumber()
        {
            return $this->status->vacancy->code;
        }


Я незнаю как составить запрос для поиска по этому полю в модели поиска

Я написал вот это, но оно не работает. Я не могу понять как это сделать

<code>    $query->joinWith(['status' => function ($q) {
                   $vacancy_id = \backend\models\Vacancy::find()->where( 'title LIKE "%' . $this->titleVacancy . '%"')->one()->id;
                    $q->where('status.id_vacancy LIKE "%' . $vacancy_id . '%"');
                }]);</code>


Подскажите хоть куда думать)
Спасибо заранее
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
В моделе объявлена реляция Status? + в моделе Status объявлена реляция Vacancy?
Если да, тогда можно сделать так:
$query->joinWith(['status s', 'status.vacancy v'])->where([
    'like',
    's.id_vacancy',
    $this->idVacancy
])->andWhere([
    'like',
    'v.title',
    $this->titleVacancy
]);


Между прочим:
1. У Вас что идентификаторы в виде строк хранятся? или причем здесь like?
2. $q->where('status.id_vacancy LIKE "%' . $vacancy_id . '%"'); - поздравляю! Вы только что сделал дыру в безопасности сайта, про SQL-injection не слышали?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы