Это очень странная ситуация.Я не знаю, есть ли какая-то проблема с моим пониманием или ошибка в Laravel Eloquent ORM.Но вот что происходит.
У меня одна таблица называется users
, а другая - user_metas
.Одна таблица, очевидно, содержит все пользовательские данные, а другая таблица (user_metas) имеет 4 столбца следующим образом:
Теперь в этой таблице есть 4 записи, которые я хочу получить ДЛЯ КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ .Они следующие:
- name => region_name
- name => region_code
- name => country_name
- name => country_code
У меня есть отношения hasMany
и belongsTo
, определенные в User.php
и UserMeta.php
соответственно.И вот как я пытаюсь получить указанные выше строки из таблицы user_metas
.
$user->meta()->where('name','like','region%')->orWhere('name','like','country%')->pluck('value','name');
Проблема в том, что он возвращает все записи, которые соответствуют region%
и country%
изцелую чертову таблицу, хотя я запрашивал данные только для конкретного пользователя!Он должен автоматически отфильтровывать другие записи!
Я не знаю, что не так.Может быть, я неправильно понял функцию или что-то не так с Eloquent ORM.Кто-нибудь может распространить здесь некоторые знания?
Обновление: с использованием функции toSql
, я понял, что она использует условия напрямую, а не группирует их.Это означает, что это условие user_id = ? AND name = ? OR name = ?
вместо user_id = ? AND (name = ? or name = ?)
.