Красноречивая сборка, где запрос из массива - PullRequest
1 голос
/ 21 апреля 2019

Итак, я пытаюсь подготовить запрос Eloquent из данных в ассоциативном массиве:

/* This works */
$this
    ->where("email", "me@gmail.com")
    ->where("is_active", 1)
    ->update($params);

/* This doesn't work */
$where = [
    'email' => "me@gmail.com",
    'is_active' => 1
];
foreach ($where as $k => $v) {
    $this->where("{$k}", "{$v}");
}
$this->update($params);

Я что-то упустил?Любая помощь приветствуется.

Редактировать: запрос не обновляет сущность в базе данных.

Ubuntu 18.10 (Космические каракатицы): 4.18.0-17-общие x86_64 биты: 64 Рабочий стол: Gnome3.30.2 Ларадок, Ларавел 5.8.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Это не работает, потому что каждый $this->where() создает новый построитель запросов, но никогда не выполняет его.

Это работает:

$where = [
    'email' => "me@gmail.com",
    'is_active' => 1
];

$query = $this->newQuery();

foreach ($where as $k => $v) {
    $query->where("{$k}", "{$v}");
}

$query->update($params);

Вы также можете использовать where() с массивом:

$this->where($where)->update($params);
1 голос
/ 21 апреля 2019

Мне не совсем понятно, зачем вам это нужно. Но нет смысла зацикливаться, вы можете просто добавить массив в метод where.

$this->where([
    'email' => "me@gmail.com",
    'is_active' => 1
])->update();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...