Красноречивые запросы работают отдельно, но не вместе в подзапросе

  1. Идея в дизайне базы данных состоит в том, чтобы сохранить каждый элемент данных отдельно. И каждый элемент имеет свой собственный тип данных, ограничения и правила. Это c0002 не одно поле, а два. То же самое с XXXnnn или что угодно. Это неверно, и это серьезно ограничит вашу способность использовать данные, а также использовать функции и возможности базы данных. Разделите его на два дискретных элемента данных: column_1 CHAR(1)
    column_2 INTEGER
    Затем установите AUTOINCREMENT на column_2. И да, ваш первичный ключ может быть (column_1, column_2), поэтому вы не потеряли значение c0002 для вас.
  2. Никогда не размещайте поставщиков и клиентов (независимо от того, что означает «c» и «s») в той же таблице. Если вы это сделаете, у вас не будет таблицы базы данных, у вас будет плоский файл. И различные проблемы и ограничения, связанные с этим. Это означает, что нормализовать данные. В итоге вы получите одну таблицу для Person или Organisation, содержащую общие данные (Name, Address ...), одну таблицу для Customer, содержащую данные, специфичные для клиента (CreditLimit ...), одна таблица для Supplier, содержащие данные, специфичные для поставщика (PaymentTerms ...), не содержат двусмысленных или необязательных столбцов, поэтому нет ограничений Nulls на использование или функции SQL. И когда вам нужно добавлять столбцы, вы делаете это только там, где это необходимо, не затрагивая все другие требования к плоскому файлу. Объем действия ограничивается областью изменения.
2
задан Mike K 6 March 2019 в 15:40
поделиться

1 ответ

Итак, $discountTableItemIdIn - это собрание всей таблицы? Это означает, что вам понадобится другая функция, поскольку логика ->where() в коллекции отличается от того, как она функционирует в экземпляре построителя (eloquent).

Попробуйте использовать filter():

$discountArticles = $discountTableItemIdIn->filter(function ($item) use($articleId) {
    return $item->recipient_type == "article" && $item->recipient_id == $articleId;
})->toArray();

. Это отфильтровывает вашу коллекцию $discountTableItemIdIn для записей, которые имеют тип article и recipient_id любого [ 117] содержит, возвращает новую коллекцию и преобразовывает ее в массив.

1111 Просто заметка, это довольно неэффективно; вам следует избегать загрузки всей таблицы в коллекцию и просто запрашивать таблицу напрямую, используя логику подзапроса в вашем вопросе.

0
ответ дан Tim Lewis 6 March 2019 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: